davidmou 发表于 2023-10-11 15:53:13

报错


#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:53:45

这段代码存在以下问题:

1.gets()函数已经被标记为不安全,不建议使用,应该使用fgets()函数代替。
2. 在longest_len = –1;这一行中,减号的符号被使用错误,应该使用负号- 。
3. 缺少头文件string.h ,导致编译器无法识别strlen()和strcpy()函数。

修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 1001 /* Buffer size for longest line */

int main(void) {
    char input;
    int len;
    char longest;
    int longest_len;

    longest_len = -1;
    while (fgets(input, MAX_LEN, stdin) != 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;
}

Mike_python小 发表于 2023-10-11 15:56:14

修正并完善报错的代码(C版本)

你提供的代码中存在几个问题,包括使用了未定义的strlen()和strcpy()函数以及缺少必要的头文件等。下面是修正并完善的代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h> // 添加头文件 <string.h> 以使用 strlen() 和 strcpy()
#define MAX_LEN 1001 /* Buffer size for longest line */

int main(void) {
    char input;
    int len;
    char longest;
    int longest_len;

    longest_len = -1;
    while (fgets(input, sizeof(input), stdin) != NULL) { // 使用 fgets() 替代 gets()
      len = strlen(input); // 使用 strlen() 替代未定义的 strlen()

      if (len > longest_len) {
            longest_len = len;
            strcpy(longest, input); // 使用 strcpy() 替代未定义的 strcpy()
      }
    }

    if (longest_len >= 0) {
      puts(longest);
    }

    return EXIT_SUCCESS;
}


这个示例代码演示了如何使用C语言修正和完善你提供的代码。

请注意以下几点修改:
- 添加了头文件<string.h>,以使用strlen()和strcpy()函数。
- 使用fgets()替代gets()函数来获取输入字符串,并且指定缓冲区大小sizeof(input)。
- 使用strlen()替代未定义的strlen()函数来获取字符串的长度。
- 使用strcpy()替代未定义的strcpy()函数来复制字符串。

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

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