void fun(char *str) { /**********Program**********/ char ss[81]; int i=0,j=0,count=0; while(str[i]!='\0') { if(str[i]!=' ') { count++; ss[j++]=str[i]; } i++; } while(count--){ str[i++]=ss[i++]; } /********** End **********/ }这串代码删除字符串中的空格有没有问题
时间: 2023-07-23 09:07:56 浏览: 113
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
5星 · 资源好评率100%
这段代码存在问题。在第二个while循环中,当 `count` 减少到 0 时,`str[i++]` 和 `ss[i++]` 都会变成 `\0`,导致后面的字符串无法被正确拼接。此外,`str` 字符串的长度没有变化,超出原有长度的部分可能会被乱写,导致程序崩溃或出现其他问题。
以下是修正后的代码:
```c
void fun(char *str) {
char ss[81];
int i = 0, j = 0, count = 0;
while (str[i] != '\0') {
if (str[i] != ' ') {
count++;
ss[j++] = str[i];
}
i++;
}
ss[j] = '\0'; // 在 ss 数组末尾添加 '\0',使其成为一个以 '\0' 结尾的字符串
j = 0;
while (j <= count) { // 注意这里的条件
str[j] = ss[j];
j++;
}
}
```
修正后的代码在删除空格的同时,将结果存储到了新的数组 `ss` 中,而最后通过 `str` 指针直接修改原始字符串。
阅读全文