鱼C论坛

 找回密码
 立即注册
查看: 1294|回复: 3

报错

[复制链接]
发表于 2023-10-11 15:52:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#include <stdio.h>
#include <stdlib.h>
#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;
    while( gets( input ) != NULL ){
/*
** Get length of this line. If it is longer than the previous
** longest line, save this line.
*/
        len = strlen( input );
        if( len > longest_len ){
        longest_len = len;
        strcpy( longest, input );
        }

/*
** If we saved any line at all from the input, print it now.
*/
    if( longest_len >= 0 ){
    puts( longest );}
    return EXIT_SUCCESS;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-11 15:52:39 | 显示全部楼层
问题:这段代码会产生什么错误?

答案:这段代码会产生编译错误。因为在第 16 行的  longest_len = –1;  中减号使用的是中文输入法下的破折号,而不是 ASCII 码下的减号。将破折号替换为减号即可解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-11 15:53:17 | 显示全部楼层
这段代码中存在几个问题,我将逐一解释并提供修复的建议。

1. 你没有包含string.h头文件。strlenstrcpy函数都在这个头文件中定义,所以你需要在代码的开头添加#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
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-11 15:54:07 | 显示全部楼层
修正并完善报错的代码(C++版本)

你提供的代码中存在几个问题,包括函数gets()已经被废弃、使用了未定义的strlen()strcpy()函数等。下面是修正并完善的代码:
#include <iostream>#include <cstring> // 包含头文件 <cstring> 以使用 strlen() 和 strcpy()#define MAX_LEN 1001 /* Buffer size for longest line */int main() {    char input[MAX_LEN];    int len;    char longest[MAX_LEN];    int longest_len;    longest_len = -1;    while (std::cin.getline(input, MAX_LEN)) { // 使用 std::cin.getline() 替代 gets()        len = std::strlen(input); // 使用 std::strlen() 替代 strlen()        if (len > longest_len) {            longest_len = len;            std::strcpy(longest, input); // 使用 std::strcpy() 替代 strcpy()        }    }    if (longest_len >= 0) {        std::cout << longest << std::endl; // 使用 std::cout 替代 puts()    }    return 0;}
这个示例代码演示了如何使用C++语法修正和完善你提供的代码。

请注意以下几点修改:
- 使用std::cin.getline()替代gets()函数来获取输入字符串,保证输入的安全性。
- 使用std::strlen()替代strlen()函数来获取字符串的长度。
- 使用std::strcpy()替代strcpy()函数来复制字符串。
- 使用std::cout替代puts()函数来输出字符串。

希望这个修正后的代码对你有所帮助。如果还有其他问题,请继续提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表