寻找垃圾价值的来源
Finding source of garbage value
所以我编写了一个自定义代码来从字符串中删除 spaces。但是当我 运行 它时,如果没有输入,第二个字符串将给出 3 个垃圾值,如果 space 太多,代码有时会添加一个 space 字符串它自己的。我只是找不到三个垃圾值的来源:(
#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]=='[=10=]')
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个字符,那么垃圾值似乎就消失了。但如果只有两个或一个字符,则会出现垃圾值。
当您向 string
添加字符时,您并未添加终止空字符。因此 string
过去的所有未初始化元素。调用 strlen
然后读取那些未初始化的字符导致 undefined behavior.
复制字符后,在末尾添加空终止符:
for(z=0;z<=rDlength;z++) {
if(rstring[z]==' ') {
space++;
continue;
}
else if(rstring[z]=='[=10=]')
break;
else if(rstring[z]!=' ')
string[++w]=rstring[z];
}
string[++w]='[=10=]';
所以我编写了一个自定义代码来从字符串中删除 spaces。但是当我 运行 它时,如果没有输入,第二个字符串将给出 3 个垃圾值,如果 space 太多,代码有时会添加一个 space 字符串它自己的。我只是找不到三个垃圾值的来源:(
#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]=='[=10=]')
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个字符,那么垃圾值似乎就消失了。但如果只有两个或一个字符,则会出现垃圾值。
当您向 string
添加字符时,您并未添加终止空字符。因此 string
过去的所有未初始化元素。调用 strlen
然后读取那些未初始化的字符导致 undefined behavior.
复制字符后,在末尾添加空终止符:
for(z=0;z<=rDlength;z++) {
if(rstring[z]==' ') {
space++;
continue;
}
else if(rstring[z]=='[=10=]')
break;
else if(rstring[z]!=' ')
string[++w]=rstring[z];
}
string[++w]='[=10=]';