在线编译器 C

#include<stdio.h> const int N=1000; int main() { char str[N+1]; int i=0; char c; while((c=getchar())!='\n') { str[i]=c; i++; } str[i]='\0'; int k=0; while(str[k]!='\0') { k++; } while(k>=0) { printf("%c",str[k]); k--; } return 0; }
这段代码试图读取一行字符串,然后反向输出它。但输出结果会多出一个字符。

- 第一个while循环读取字符直到换行符,但getchar()返回的是int类型,用char类型变量c接收可能会在某些情况下出问题,不过这不是主要错误。
- 第二个while循环计算字符串长度,但k最终会停在字符串结束符'\0'的位置,而不是最后一个字符的位置。
- 第三个while循环从k开始输出,而k此时指向的是'\0',所以会先输出一个空字符(不可见),然后才输出真正的字符。你应该让k指向最后一个字符,而不是结束符。