davidmou 发表于 2023-10-11 15:52:28

报错


#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;
}

isdkz 发表于 2023-10-11 15:52:39

问题:这段代码会产生什么错误?

答案:这段代码会产生编译错误。因为在第 16 行的longest_len = –1;中减号使用的是中文输入法下的破折号,而不是 ASCII 码下的减号。将破折号替换为减号即可解决问题。

陶远航 发表于 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;
    int len;
    char longest;
    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
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 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;
    int len;
    char longest;
    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()函数来输出字符串。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 报错