Online Compiler 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; int i = 0; char b; while((b=getchar())!='\n'){ a[i]=b; i++; } a[i] = '\0'; reverse(a); printf("%s", a); return 0; }
这段代码试图从键盘读取一行字符,反转后输出。但存在一个严重问题:指针 `a` 没有被分配内存空间,直接使用 `a[i]=b` 会导致未定义行为(可能崩溃或覆盖其他数据)。

- 指针 `a` 声明为 `char *a;` 但没有指向任何有效的内存区域。你需要为它分配足够的空间来存储输入的字符,例如使用 `malloc` 或声明一个固定大小的数组。
- 循环读取字符时,没有检查是否超出分配的空间,这可能导致缓冲区溢出。你需要确保不会写入超过分配大小的位置。