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

#include <stdio.h> int isvovel(char c){ char *vovel="aeiouyAEIOUY"; while(*vovel){ if(c==*vovel){ return 1; } vovel++; } return 0; } int sum(char c[]){ int i=0,sum=0; while(c[i]!='\0'){ sum++; i++; } return sum; } void clear(char c[]){ int size=sum(c),t=0; char result[1001]={0}; for(int i=0;i<size;i++){ if(!isvovel(c[i])){ result[t++]=c[i]; } } result[t]='\0'; for(int i=0;i<size;i++){ c[i]=result[i]; } c[t]='\0'; } int main() { char c[1001]; char a; int i=0,answer=0; while((a=getchar())!=EOF){ c[i]=a; i++; } answer=clear(c); printf("%d",answer); return 0; }
这段代码试图从输入中删除所有元音字母,并输出删除后的字符串长度。但有几个问题需要修正。

- `clear` 函数被声明为 `void` 类型,不返回任何值,但 `main` 中却试图将它的返回值赋给 `answer`。你需要决定 `clear` 是应该返回长度,还是直接在 `main` 中计算长度。

- 在 `clear` 函数中,将 `result` 复制回 `c` 时,循环条件 `i<size` 会复制整个原数组长度,但 `result` 可能更短,导致复制了未初始化的字符。应该只复制到 `t` 个有效字符。

- `main` 中读取字符后没有给字符串加结束符 `'\0'`,导致 `sum` 函数可能越界。