C Читать строку файла Макс. Количество - PullRequest
0 голосов
/ 25 ноября 2011
#include <stdio.h>
#include <stdlib.h>
int main ( int argc, char *argv[] )
{
//sets the number of lines ot be read  
char strline[10000]; 
// checks to see that there are only 2 entries in the argv by checking in argc
if ( argc != 2 )
    {
        printf( "ERROR. Enter a file name\n", argv[0] );
    }
    else 
    {
       //opens the file which was entered by the user as read only 
       FILE *infile = fopen( argv[1], "r");
        // covers a miss spelling of a file name or file doesn't exist
        if ( infile == 0 )
        {
            printf( "ERROR. Did you make a mistake in the spelling of the file or the File entered doesn't exist\n" );
        }
        else 
        {
            // File exists read lines, while not at the end of the file
while  (!feof(infile))
                {   
//Get next line to be printed up to 126 characters per a line
if(fgets(strline, 126, infile))
            {
                //print the current line (stored in strline)
printf("%s",strline);
            }
        }
    //closes the file
fclose( infile );
    return 0;        
    }
    }
} 

В 6-й строке (комментарий выше) я указал, что это максимальное количество строк, которое может прочитать программа. Вчера мне сообщили, что это не так.

Может кто-нибудь объяснить мне, что на самом деле означает строка кода?

char strline[10000]; 

Так что из того, что люди говорят, что установка 128 делает больше снэса (126 для fgets и немного места)

1 Ответ

3 голосов
/ 25 ноября 2011

char strline [10000];Поэтому вы выделили буфер длиной 10 000 байт:

           +--------------...-+
strline -> |      10000       |
           +--------------...-+

, если вы хотите выделить вместо этого 10 000 строк, вам понадобится что-то вроде этого:

char* strline[10000]; // array of 10,000 pointers to strings

будет иметь доступ к линиямчтобы назначить каждой записи в массиве

strline[0]
strline[1]
...
strline[10000]

, например, когда строка читается, вам нужно выделить буфер для строки и затем указать на нее строку strline

char* line = malloc( linelength + 1 );
fgets( line, linelength, fp );
strline[0] = line;

              +-------+
strline[0] -> | line  |
              +-------+
...