在线编译器 C

#include <stdio.h> void my_strcpy(char dst[], char src[]) { int i = 0; while (src[i] != '.' && src[i] != '\0' && src[i] != '\n') { dst[i] = src[i]; i++; } dst[i] = '\0'; } void delete_char(char s[], char c) { char a[]; int i = 0; int j = 0; while (s[i] != '.' && s[i] != '\n' && s[i] != '\0') { if (s[i] != c) { a[j] = s[i]; j++; } i++; } my_strcpy(s, a); } int main() { char s[] = "bSSSSnana."; char c = 'a'; delete_char(s, c); printf("%s", s); return 0; }
这段代码试图实现一个删除字符串中指定字符的功能,但存在几个问题。

代码中 `delete_char` 函数先复制非指定字符到临时数组 `a`,再通过 `my_strcpy` 复制回原字符串。但 `my_strcpy` 的复制条件判断了 `'.'`,这会导致字符串被截断。另外,`delete_char` 中 `char a[]` 的声明缺少大小,这是语法错误。

- 在 `delete_char` 函数中,`char a[]` 的声明没有指定数组大小,这在C语言中是不允许的。你需要为临时数组分配足够的空间,比如和原字符串一样大。
- `my_strcpy` 函数在复制时检查了 `'.'` 字符,但你的本意是复制整个字符串直到结尾。这个条件会导致复制提前停止,比如原字符串 `"bSSSSnana."` 中的点号会阻止复制完成。检查一下这个条件是否真的需要。