【发布时间】:2015-05-05 08:32:11
【问题描述】:
假设我有一个文件
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefgh
abcdefg
abcdef
abcde
abcd
abc
ab
a
我需要找到带有length >= 5 的行。
这是代码
int cOriginal(char *fileName)
{
FILE *file = fopen(fileName, "r");
char line[256];
int numberOfStrings = 0;
while(fgets(line, sizeof(line), file))
{
if (strlen(line) >= sizeCap)
{
numberOfStrings++;
}
}
fclose(file);
return numberOfStrings;
}
其中sizeCap是一个常数,定义为
const int sizeCap = 5;
我的main() 函数
int main()
{
char filename[] = "file.txt";
int cnt3 = cOriginal(filename); // th
printf("Using function3: %d", cnt3);
return 0;
}
问题是它返回10 而不是8。我不明白为什么。
我身边没有 IDE,所以我必须使用 g++ 和命令行来编译它,所以我无法调试它(或者至少我不知道如何调试)。
有什么问题?
【问题讨论】:
-
fgets将 new-lin 字符保留在行尾,这有助于strlen。您可以strtok(line, "\n")删除它。strtok在<string.h> -
打印比
sizeCap长的行会显示问题。 -
编译时包含所有警告和调试信息 (
gcc -Wall -Wextra -g)。然后使用调试器 (gdb);顺便说一句,C++ 代码使用g++,C 代码使用gcc,因为C 和C++ 是不同的语言。