Online Compiler C

#include <stdio.h> void delete_char(char s[], char c){ int m=0,n=0; int a[m]={0}; while(s[n]!='\0'&&a[n]!='\n'&&a[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("%s",&n); delete_char(dst,n); return 0; }
这段代码试图从字符串中删除指定字符,但存在几个关键问题。

首先,`int a[m]={0};` 这一行有问题。`m` 初始为0,所以数组 `a` 的大小是0,无法存储任何字符。而且C语言中不允许用变量定义数组大小(除非使用变长数组,但这里 `m=0` 导致数组长度为0,不合理)。另外,`a[n]!='\n'` 和 `a[n]!='.'` 的检查也不正确,因为 `a` 数组是空的,访问 `a[n]` 会导致未定义行为。

其次,`scanf("%s",&n);` 这一行错误。`n` 被声明为 `char` 类型,但 `%s` 用于读取字符串,应该用 `%c` 读取单个字符,并且不需要取地址符 `&`(因为数组名本身就是地址,但这里 `n` 是单个字符变量)。

- 提示1:检查数组 `a` 的定义方式。你需要一个足够大的数组来存放结果,而不是用变量 `m` 来定义大小。考虑用固定大小或动态分配。
- 提示2:检查 `scanf` 的格式说明符和参数类型。`n` 是 `char` 类型,应该用 `%c` 读取一个字符,并且注意 `%c` 会读取空白字符,可能需要处理输入缓冲区中的换行符。