所以我做了一个自定义代码来删除字符串中的空格。但是当我运行它时,如果没有输入,第二个字符串将给出3个垃圾值,如果有太多空格,代码有时会自己添加一个空格字符串。我只是找不到三个垃圾值的来源:(
#define SIZE 200
int main ()
{
int w=0, z=0, x=0, y=0, z0, rDlength=0, Dlength=0, RandomChar, Dx=0, Dy=0;
char rstring[SIZE], string[SIZE];
srand(time(NULL));
//debug
int space=0;
printf("Input Text: ");
gets(rstring);
strupr(rstring);
strlen(rstring);
rDlength=strlen(rstring);
//debug
printf("%d\n", rDlength);
w=-1;
for(z=0;z<=rDlength;z++)
{ if(rstring[z]==' ')
{ space++;
continue;
}
else if(rstring[z]=='\0')
break;
else if(rstring[z]!=' ')
string[++w]=rstring[z];
}
//debug
printf("%d\n", space);
Dlength=strlen(string);
for(z=0;z<rDlength;z++)
printf("%c", rstring[z]);
printf("\n");
for(z=0;z<Dlength;z++)
printf("%c", string[z]);
printf("\n");
printf("String length is %d\n", Dlength);
return 0;
}
如果至少有3个输入字符,则垃圾值似乎消失。但如果只有两个或一个字符,则会出现垃圾值。
答案 0 :(得分:2)
向string
添加字符时,不会添加终止空字符。所以string
过去的任何元素都是未初始化的。然后,调用strlen
会读取那些未初始化的字符,从而生成undefined behavior。
复制字符后,将空终止符添加到结尾:
for(z=0;z<=rDlength;z++) {
if(rstring[z]==' ') {
space++;
continue;
}
else if(rstring[z]=='\0')
break;
else if(rstring[z]!=' ')
string[++w]=rstring[z];
}
string[++w]='\0';