gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:29 24 4
gpt4 key购买 nike

好的,所以我有一个代码可以去除字符串中的重复字符,基于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com