|
发表于 2023-10-11 15:53:17
|
显示全部楼层
这段代码中存在几个问题,我将逐一解释并提供修复的建议。
1. 你没有包含string.h头文件。strlen和strcpy函数都在这个头文件中定义,所以你需要在代码的开头添加#include <string.h>。
2. gets函数已经在C11标准中被废弃,因为它可能会导致缓冲区溢出。你应该使用fgets函数代替。fgets函数需要一个额外的参数,即最大的字符数(包括最后的'\\0'字符)。你可以使用MAX_LEN作为这个参数。
3. longest_len = –1;这行代码中的负号可能是非标准的字符,你应该使用标准的负号。
修复后的代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h> /* Added this line */
- #define MAX_LEN 1001 /* Buffer size for longest line */
- int main(void) {
- char input[MAX_LEN];
- int len;
- char longest[MAX_LEN];
- int longest_len;
- longest_len = -1; /* Fixed the minus sign */
- while(fgets(input, MAX_LEN, stdin) != NULL) { /* Replaced gets with fgets */
- len = strlen(input);
- if(len > longest_len) {
- longest_len = len;
- strcpy(longest, input);
- }
- }
- if(longest_len >= 0) {
- puts(longest);
- }
- return EXIT_SUCCESS;
- }
复制代码
这段代码将从标准输入读取行,如果一行的长度超过了之前读取的所有行,就将其保存下来。在读取完所有行之后,它将打印出最长的行。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 |
|