Это должно сработать:
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);
}
}
Редактировать: Граничные условия, предложенные caf
& lorenzog
в комментариях, были включены. Никогда не думал, что защита от ошибок может быть такой утомительной! (По-прежнему не проверяются случаи, когда номер строки больше, чем int
может безопасно удерживать. Это оставлено в качестве упражнения для OP:)