我试图用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。谁能告诉我如何解决这个问题?
是 string
别名 char *
? 如果是的话,我想你可以学习一些关于C语言的指针。make_key
(key
)通过指针传值,而不是通过值。这意味着 k
, k_l
, k_u
和 key
指向内存中的同一个位置。所以如果你修改 key
在 make_key
,您还可以修改 k
, k_l
和 k_u
. 你可以打印他们的地址,如 printf("k: %p, k_l: %p, k_u: %p\n", k, k_l, k_u);
在 main
功能。并打印 key
在 make_key
. 之后,我想你可能会闻到一些味道。希望能帮到你