c - 未定义的输出(K&R 1.19)

标签 c output

我正在尝试找出 K&R 的练习 1.19。

Write a function reverse(s) that reverses the characte string s. Use it to write a program that reverses its input a line at a time

这是我的代码

#include <stdlib.h>
#include <stdio.h>
#define MAX 150

void reverse(char s[]);

int main()
{
    int c, i;
    char string[MAX];

    i=0;
    while((c=getchar())!= EOF){
       while((c=getchar()) != '\n'){
            string[i] = c;
            i++;
       }
       reverse(string);
    }
    return 0;
}
void reverse(char s[]){
   int i, j;
   for(i=0; i<MAX-1; i++){
       if(s[i] == '\n')
          break;
   }
   for(j=i;j>=0;j--)
     printf("%c", s[j]);
   printf("\n");

}

问题是我有一个未定义的输出,就像这样 Undefined Behavior

我试图弄清楚,但对我来说没有意义。 预先感谢您的帮助。

最佳答案

您的代码中有几个问题。

首先,您通过 EOF 检查“吞掉”第一个字符;第一个写入数组的实际上是第二个(如果您输入 string^ 它会将 tring` 复制到缓冲区)。

然后,无论包含的字符串长度如何,都将反转整个缓冲区(150 个字符)。您看到的垃圾只是您也反转的缓冲区的“其余部分”。请注意,“垃圾”的最后一个字符是 gnirt,它是 tring 反转的。

然后还要注意正确的字符串终止符 \0

关于c - 未定义的输出(K&R 1.19),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36694843/

相关文章:

c - UART 至 UART 桥接器 STM32

c - 在 C 中是否可能有一个结构或函数 union ?

c - 如何在C中使用malloc初始化静态指针?

C++ 通用输出运算符重载

JAVA货币兑换

c++ - 如何在使用 CMake 构建时列出 .hpp 头文件

c - 编写一个程序,将用户输入的数字相乘,直到这些数字的乘积达到 1000

c - 在没有包含防护的情况下避免重新声明错误

javascript - React 中输出表单字段值

c++ - 在 C++ 中,它是从小数点开始还是从整个 #setprecision 开始