c - 字符串中的冗余字符,c

标签 c string

我正在尝试将选定的字符从一个字符串转换为另一个字符串。一切看起来都很好,除了程序不断向输出添加额外的字符。而且它似乎倾向于添加不同数量的这些“不必要的”字符。问题可能出在哪里?

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/

相关文章:

python 的 .replace 留下空行

c++ - 是否有静态分析器可以检查 C/C++/Objective-C 中的局部变量重新分配?

java - 出现 fatal error : jni. h : No such file or directory #include <jni. h>

c - 在 C 中,如何将 char[] 打印为转义的十六进制?

javascript - 如何在 Javascript 中动态删除字符串中的多余空间?

string - 在 Haskell 中,如何获得 0.03 而不是 3.0e-2?

java - 我的字符串排列算法不起作用

c - 通过轮询非阻塞套接字正确处理 EWOULDBLOCK

c - 使用C在套接字编程中获取请求的地址

c - 使用 sleep() 延迟打印字符