我正在尝试将选定的字符从一个字符串转换为另一个字符串。一切看起来都很好,除了程序不断向输出添加额外的字符。而且它似乎倾向于添加不同数量的这些“不必要的”字符。问题可能出在哪里?
int main(void) {
int i,j=0;
char string[256];
char second_arr[256];
scanf("%255s", string);
for(i=0;i<256;i++){
if(string[i]=='('||string[i]=='['||string[i]=='{'){
second_arr[j]=string[i];
j++;
}
}
printf("%s", second_arr);
}
说,
input: (hello)(}[} --->
Output:(([[H
最佳答案
问题 1:您没有测试 scanf
是否失败。它可以返回 EOF
或零以指示输入与您的格式字符串不匹配。
问题 2:即使用户输入的字符较少,您还是要复制所有 256 个字符,这意味着您复制的是垃圾。
问题 3:您没有向 second_arr
添加空终止符。
只需这样做:
if (scanf("%255s", string) != 1)
{
printf("scanf failed\n");
return 1;
}
for (i = 0; i < 256 && string[i]; i++) {
if(string[i]=='('||string[i]=='['||string[i]=='{'){
second_arr[j]=string[i];
j++;
}
}
second_arr[j] = '\0';
printf("%s", second_arr);
return 0;
关于c - 字符串中的冗余字符,c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22429799/