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

问题描述 投票:0回答:1

我试图用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。谁能告诉我如何解决这个问题?

c function encryption return lowercase
1个回答
3
投票

string 别名 char *? 如果是的话,我想你可以学习一些关于C语言的指针。make_key(key)通过指针传值,而不是通过值。这意味着 k, k_l, k_ukey 指向内存中的同一个位置。所以如果你修改 keymake_key,您还可以修改 k, k_lk_u. 你可以打印他们的地址,如 printf("k: %p, k_l: %p, k_u: %p\n", k, k_l, k_u);main 功能。并打印 keymake_key. 之后,我想你可能会闻到一些味道。希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.