Online Compiler C

#include <stdio.h> int main() { char str[1001]; int i=0; char c; while ((c=getchar())!=0&&c!='\n'){ str[i]=c; i++; } int k=0; while(str[k]!='\0'){ k++; } k--; while(k>=0){ putchar(str[k]); k--; } printf("\n"); } return 0;
这段代码试图读取一行字符串,然后逆序输出。但存在几个问题。

首先,`while ((c=getchar())!=0&&c!='\n')` 中的 `0` 应该改为 `EOF`,因为 `getchar` 在读取失败或到达文件末尾时返回 `EOF`,而不是 `0`。另外,`c` 应声明为 `int` 类型,因为 `EOF` 通常是一个负值,`char` 可能无法正确表示。

其次,代码在读取完字符串后,通过循环计算长度,然后从末尾向前输出字符。但注意,读取时并没有在字符串末尾添加 `'\0'`,所以 `while(str[k]!='\0')` 会越界访问未初始化的内存,导致不确定行为。

- 检查 `getchar` 的返回值比较条件,确保使用 `EOF` 而不是 `0`。
- 在读取完所有字符后,记得在 `str[i]` 位置手动添加字符串结束符 `'\0'`。