C 中 if 语句中的命令无论语句是否为真都会发生

标签 c

对于我正在编写的程序,我需要逐行读取文件并打印出文件中最长的一行,以及该行的长度以及文件中的总行数。

我有这个:

char line[100];
char* longLine;
int count, longestLine, temp;

count=0;
longestLine=0;

while(fgets(line,100,inFile) != NULL) {
    temp=strlen(line);  
    if(temp > longestLine) {            
        longLine=line;
        longestLine=temp;
    }
    count++;
}
printf("Longest line: %sLength of longest line: %d characters\nTotal number of lines: %d\n",longLine, longestLine, count);

longestLine 和 count 打印正确,但无论如何,longLine 总是打印出文件的最后一行而不是最长的一行。使用 print 语句,我确定 while 循环中的 if 语句仅在找到新的最长行时才被调用,但无论如何 longLine 都会发生变化。谁能告诉我我做错了什么?谢谢!

最佳答案

问题是 longLine 是一个指针。您将进入 if,然后将 longLine 设置为指向线...在下一个 while 开始时已更改。我怀疑您打算做的是使用 strcpy 将 line 的内容复制到 longLine 中,否则,每次都通过循环。 longLine 将始终指向当前评估的行。

关于C 中 if 语句中的命令无论语句是否为真都会发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436481/

相关文章:

C 在按键时退出无限循环

c - 从哈希表 C 中获取链表

c - 按列打印 AVL 树

c - 在C11中使用atomic_fetch_add进行手动引用计数

c - 如何在 C 中读取具有不同格式的多行 TXT 文件?

c - 当 realloc 缩小分配的 block 时,释放的内存在哪里?

c++ - C/C++ 宏字符串连接

c - 错误: expected expression in else if statement

c - 如何解决 C 代码的 MISRA C :2012 Rule 13. 2 和 13.3?

c - 从文件夹加载图像(使用 C、OpenCV、Visual Studio 2008)