我正在尝试将文件中的单词列表存储到 char*中。我不会假设最大行数或最大字符数。因此,为了解决这个问题,我决定运行 .txt 文件以查找行数和最大字符数,以便为 char * 列表分配内存。
但是,当我使用 GDB 调试我的程序时,它会跳过文件的第二次运行以存储在单词中。为什么会这样,我该如何解决?谢谢!
void readFile(int argc, char** argv)
{
FILE *myFile;
char** list;
char c;
int wordLine = 0, counter = 0, i;
int maxNumberOfChars = 0, numberOfLines = 0, numberOfChars = 0;
myFile = fopen(argv[1], "r");
if(!myFile)
{
printf("No such file or directory\n");
exit(EXIT_FAILURE);
}
while((c = fgetc(myFile)) !=EOF)
{
numberOfChars++;
if(c == '\n')
{
if(maxNumberOfChars < numberOfChars)
maxNumberOfChars += numberOfChars + 1;
numberOfLines++;
}
}
fseek(myFile, 0, SEEK_SET);
list = malloc(sizeof(char*)*numberOfLines);
for(i = 0; i < wordLine ; i++)
list[i] = malloc(sizeof(char)*maxNumberOfChars);
while((c = fgetc(myFile)) != EOF)
{
if(c == '\n' && counter > 0)
{
list[wordLine][counter] = '\0';
wordLine++;
counter = 0;
}
else if(c != '\n')
{
list[wordLine][counter] = c;
counter++;
}
}
fclose(myFile);
}