C语言 为什么函数会重写其他变量?



我尝试用 C 语言编写一段代码,该代码从命令行获取 26 个字母的长代码,并使用该代码来加密消息。


int main(int argc, string argv[])
{
string k = (argv[1]);
string k_l = make_key(k, 0);    
string k_u = make_key(k, 1);
}
string make_key(string key, int t)
{
if (t == 0)
{
for (int i = 0; i < 26; i++) 
{
key[i] = tolower(key[i]);
}
}
if (t == 1)
{
for (int i = 0; i < 26; i++) 
{
key[i] = toupper(key[i]);
}
}
return(key);
} 

当我string k_l = make_key(k, 0);运行代码时,它的工作方式就像我想要的那样,并将所有字符更改为小写并将其保存在k_l中。但是当我运行k_u = make_key(k, 1);for 循环时,它会将所有字符更改为大写。但随后它不仅k_u而且 k 和 k_l 也发生了变化。

例如,当我插入"aBc"并运行代码时,我最终得到 k、k_l 和 k_u 等于 ABC,而不是k_l等于 abc 和 k = aBc。有人可以告诉我如何解决这个问题吗?

stringchar *的别名吗?如果是,我想你可以学习一些关于C的指针。make_key的第一个参数 (key( 按指针传递值,而不是按值传递值。这意味着kk_lk_ukey指向内存中的同一位置。所以如果你在make_key中修改key,你也会修改kk_lk_u。您可以像printf("k: %p, k_l: %p, k_u: %pn", k, k_l, k_u);一样打印他们的地址main功能。并以make_key打印key.在那之后,我想你可能会闻到一些东西。希望这能帮助你。

最新更新