c语言的void函数返回相同的结果


#include <stdio.h>
#include <stdlib.h>
void squeeze(char s[], int c);
int main(){
char x[]="cats";
int y =10;
squeeze(x,y);
printf("%s %dn", x, y);
return 0;
}

void squeeze (char s[], int c){
int i,j;
for(i = j=0; s[i]!=''; i++)
if(s[i] !=c)
s[j++]=s[i];
s[j] = '';
}  

这个函数是";从s中删除所有c";。我不知道如何让它发挥作用。此函数的输出为cats, 10,没有任何变化。我是不是做错了什么?

函数工作正常。

问题是字符串cats不包含字符10,因此您不应该期望发生更改。在从ASCII派生的代码集中,字符10是换行符'n'。创建字符串char z[] = "Onenlinenornmanyn";并调用sqeeze(z, 'n');,在之前和之后打印z

#include <stdio.h>
void squeeze(char s[], int c);
int main(void)
{
char x[] = "cats";
int y = 10;
printf("before: [%s] %dn", x, y);
squeeze(x, y);
printf("after:  [%s] %dn", x, y);
printf("%s %dn", x, y);
char z[] = "Onenlinenornmanyn";
printf("before: [%s]n", z);
squeeze(z, 'n');
printf("after:  [%s]n", z);
return 0;
}
void squeeze(char s[], int c)
{
int i, j;
for (i = j = 0; s[i] != ''; i++)
if (s[i] != c)
s[j++] = s[i];
s[j] = '';
}

其输出为:

before: [cats] 10
after:  [cats] 10
cats 10
before: [One
line
or
many
]
after:  [Onelineormany]

最新更新