在线编译器 C

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

代码的思路是:遍历原字符串,将不等于目标字符的字符存入一个数组 `a`,最后将 `a` 的内容复制回原字符串并打印。但数组 `a` 的定义和使用有错误。

- 数组 `a` 的大小被定义为 `int a[m]={0};`,但此时 `m` 的值为 0,所以数组长度为 0,无法存储任何字符。这会导致程序行为异常。
- 另外,`a` 被声明为 `int` 类型,但存储的是字符,类型不匹配。
- 循环条件中检查了 `s[n]!='.'`,这会让字符串遇到句点就停止处理,可能不是你的本意。
- 最后打印时,每次循环都打印一个字符,但原字符串中未被覆盖的位置可能残留旧字符。