我正在尝试将选定的字符从一个字符串转换为另一个字符串。一切看起来都没问题,除了程序不断向输出中添加其他字符。似乎它往往会增加不同数量的这些“不必要的”角色。问题可能在哪里?
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
答案 0 :(得分:2)
问题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;
答案 1 :(得分:1)
试试这个:
for (i=0; string[i]!=0; i++) // iterate the input string until the null-character
{
if (string[i] == '(' || string[i] == '[' || string[i] == '{')
second_arr[j++] = string[i];
}
second_arr[j] = 0; // set a null-character at the end of the output string
答案 2 :(得分:0)
没有什么可以终止第二个字符串。添加
||string[i]=='\0'
根据你的条件。当你看到null char时也会跳出循环,但只有在你复制它之后。
答案 3 :(得分:-1)
您应该在第二个字符串second_arr
的末尾添加字符'\n'
以表明其结束。