Cela devrait faire l'affaire:
char * ReadFromFile(const char * fileName, int line)
{
FILE *fp;
char c;
char *buffer = malloc(100 * sizeof(char)); // change 100 to a suitable value;
int buffer_length = 100; // eg. max length of line in your file
int num = 0;
if(line < 0) // check for negative line numbers
{
printf("Line number must be 0 or above\n");
return(NULL);
}
if((fp = fopen(fileName,"r")) == NULL)
{
printf("File not found");
return(NULL);
}
while(num < line) // line numbers start from 0
{
c = getc(fp);
if(c == '\n')
num++;
}
c = getc(fp);
if(c == EOF)
{
printf("Line not found\n");
fclose(fp);
return(NULL);
}
else
{
ungetc(c,fp); //push the read character back onto the stream
fgets(buffer,buffer_length,fp);
fclose(fp);
return(buffer);
}
}
Edit: Les conditions aux limites proposées par caf
& lorenzog
dans les commentaires ont été inclus. Jamais pensé que l'anti-erreur pourrait être si fastidieux! (Ne vérifie toujours pas les cas où le numéro de ligne est plus que int
peut contenir en toute sécurité. Ceci est laissé comme un exercice à OP :)
Cela ressemble à des devoirs ... –
avez-vous accès à utiliser fopen fread et tel ? –
Meilleure déclaration: 'int ReadFromFile (const char * nomFichier, int numéroLigne, char * tampon, int longueur_tampon)'. –