Онлайн компилятор C

#include <stdio.h> #include <string.h> int my_strlen(char c[]) { int len = 0; int i = 0; while (c[i] != '\0') { len++; i++; } return len; } void reverse(char c[]) { int size = my_strlen(c); for (int i = 0; i < size / 2; i++) { char tmp = c[i]; c[i] = c[size - i - 1]; c[size - i - 1] = tmp; } return; } int main() { char a[1001]; int i = 0; char b; while (i < 1000 && (b = getchar()) != '\n') { a[i] = b; i++; } a[i] = '\0'; reverse(a); printf("%s", a); return 0; }
这段代码实现了一个字符串反转程序。它从标准输入读取一行字符(最多1000个),然后反转这个字符串并输出。

代码中定义了两个函数:`my_strlen` 用于计算字符串长度,`reverse` 用于原地反转字符串。主函数中通过 `getchar()` 逐个读取字符存入数组,最后调用 `reverse` 并输出结果。

- 注意 `reverse` 函数中循环条件 `i < size / 2` 是正确的,但需要确认 `my_strlen` 是否在所有情况下都能正确返回长度。检查 `my_strlen` 中 `while` 循环的终止条件,确保它不会因为数组越界而出错。

- 主函数中读取字符的循环条件 `i < 1000` 和 `(b = getchar()) != '\n'` 是正确的,但注意 `getchar` 返回的是 `int` 类型,用 `char` 变量接收可能会丢失信息,特别是在处理非ASCII字符或EOF时。考虑将 `b` 的类型改为 `int`。