为什么当我想计算字符数时 fgets 只有一行

Why fgets just have one line when i want to count the number of char

我试过这个来计算看起来像那样的 .txt 中的字符数

ID2;Orelsan;San;Musiques\Orelsan San.mp3
ID1;Rick Astley;Never Gonna Give You Up;Musiques\Rick Astley - Never Gonna Give You Up.mp3

我写了这个但是 stringsize 等于第 2 行中的字符数

int search(){

FILE *inputFile;
char buffer[255];
int sizestring=0;

inputFile=fopen("bddmp3.txt","rt");

fgets(buffer2,255,inputFile);
while(inputFile!=EOF){
    sizestring++;
}
printf("%d",sizestring);

我尝试了另一种使用 strlen 的方法,但我遇到了同样的问题,我只有第一行的长度

FILE *inputFile;
char buffer[255];
int toto;
int stringsize=0;

inputFile=fopen("bddmp3.txt","r");

stringsize= strlen(fgets(buffer,255,inputFile));
printf("taille :%d\n",stringsize);

fgets returns NULL(而不是 EOF)如果没有更多数据可供读取。

你可能想要这个:

inputFile = fopen("bddmp3.txt", "rt");
if (inputFile == NULL) {
  .. handle error
}

while (fgets(buffer2,255,inputFile) != NULL) {
    sizestring++;
}

这没有意义:

while(inputFile!=EOF){
    sizestring++;
}
  1. 您将 inputFileFILE* 进行比较,而 int 没有任何意义
  2. sizestring++ 不可能改变 inputFile,因此这个循环很可能永远 运行。

一个建议:像这样的程序最好用fgetc()来写,它读取单个字符。然后,您可以检查每个字符并轻松计算行数(通过计算 '\n' 即换行符)或字符总数。使用这种方法,您不需要为每一行分配一个缓冲区(您当前的问题会有一个错误:如果该行超过 255 个字符会发生什么情况?),并且它可以轻松处理具有任意长度行的文件。 使用 fgetc() 读取 character-by-character 并不是低效的,因为在 stdio 库中实现了缓冲。