c - 传递 char[] 参数根本不起作用

标签 c arrays string function parameters

好的,所以我有一个代码可以去除字符串中的重复字符, 基于 here .好的,我修改成这样:

    void rem_dup(char str[]){
    int     char_check=0;
    int     i,j;
    char    ch;
    char    filterstr[256]; /* store the temporary strings */

    /* check from 1st character in the string */
    while(str[char_check]) {

            ch = str[char_check];

            i = j = char_check+1;

            filterstr[0] = str[0]; // added

    /* logic to remove the repeated character */
    while(str[i]) {
            if(str[i] != ch) {
                    filterstr[j] = str[i]; //modifid
                    j++;
            }
            i++;
    }

    filterstr[j]='\0'; //modified

    str = filterstr; //added

    char_check++;

    }

    printf("String after removing duplicates : %s\n",str); this
    }

我通过一个简单的脚本实现了这一点

    int main(){
        char Q[20];
        char E[26];

        fgets(Q,sizeof(Q),stdin);
        fgets(E,sizeof(E),stdin);

        rem_dup(Q);
        rem_dup(E);

        printf("\n%s\n%s\n",Q,E);
        return 0;
    }

我期待这样的输出

    0101010101
    ababababab
    String after removing duplicates : 01
    String after removing duplicates : ab
    01
    ab

但是输出会变成这样

    0101010101
    ababababab
    String after removing duplicates : 01
    String after removing duplicates : ab
    0101010101
    ababababab

如您所见,实际情况是 Q 和 E 根本没有修整。如果数组参数是传引用参数,我怎么会发生这种事??任何人都有答案吗?我搜索了很多资源并尝试了这个唯一的问题,但总是失败。感谢您的回答或只是提供意见。

最佳答案

线

str = filterstr;

没有按照您的意愿行事。该代码只是将指针的本地副本更改为缓冲区。它不会更改缓冲区的内容。

你需要打电话

strcpy(str, filestr);

就在函数返回之前,即您的 printf 现在所在的位置。

看看你的逻辑,我相信它会因为更复杂的输入而失败。我不会尝试为您调试它,因为我不能 100% 确定您希望代码做什么。

关于c - 传递 char[] 参数根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669856/

相关文章:

c - 在 picoc 中添加新数据类型(以及新数据类型的算术运算符)

将 ISBN 字符串转换为数字

ios - 如果 "active"列在 Swift 3/Xcode 8 中为 "no",如何隐藏单元格

arrays - Lua: "dragging"数组中的元素序列

java - 如何执行 JButton Action 监听器一定次数

r - 未识别的空白

c - Dns 协议(protocol)头

c - 如何更改 objdump 输出格式?

java - 正则表达式 - 匹配包含 "+"和 "-"的字符串

c# - 从字符串中修剪斜杠#