Online Compiler C

#include <stdio.h> #include <string.h> int main() { char a[1000]; scanf("%1000[^\n]", a); int len = strlen(a); if (len > 0 && a[len - 1] == '\n') { a[len - 1] = '\0'; len--; } for (int i = len - 1; i >= 0; i--) { putchar(a[i]); } return 0; }
这段代码的功能是读取一行字符串,然后将其反转输出。它使用 `scanf` 的格式 `%1000[^\n]` 来读取直到换行符为止的内容,但这里有一个小问题。

- 代码中 `if (len > 0 && a[len - 1] == '\n')` 这个检查是多余的,因为 `scanf` 的 `%[^\n]` 格式不会把换行符读入字符串中,所以 `a[len-1]` 不可能是换行符。实际上,这段代码试图处理换行符,但 `scanf` 已经跳过了它,因此这个条件永远不会成立。

- 另外,`scanf` 的 `%[^\n]` 格式在遇到空输入时(比如直接按回车)可能不会正确读取,导致数组内容未定义。可以考虑使用 `fgets` 来更安全地读取一行。