我在C中制作一个简单的凯撒密码解密程序。它需要一个字符串输入(存储在文本中),并且应该打印每个可能的字母移位。
如果我要给ABC作为输入,它应该打印:
ABC
BCD
CDE
DEF
EFG
...
然而,它实际打印:
ABC
BCD
DEF
GHI
KLM
PQR
VWX
CDE
KLM
TUV
...
代码是:
int main(void)
{
// prompt for plaintext
string text = GetString();
string newtext = text;
for (int k = 0; k < 26; k++)
{
for (int i = 0, n = strlen(text); i < n; i++)
{
if (text[i] >= 'A' && text[i] <= 'Z')
{
newtext[i] = (text[i] - 'A' + k) % 26 + ('A');
}
else if (text[i] >= 'a' && text[i] <= 'z')
{
newtext[i] = (text[i] - 'a' + k) % 26 + ('a');
}
}
printf("%s\n", newtext);
printf("%s\n", text);
}
return 0;
}
我把printf(&#34;%s \ n&#34;,text);只是为了调试,我发现文本字符串正在改变循环的每次迭代,而不是只改变newtext字符串。
另外,我已经包含了一些头文件。
为什么文字会改变?
答案 0 :(得分:0)
我认为您已将string
类型定义为:
typdef char * string;
在这种情况下,请更改
string newtext = text; /// Here, both point to same memory
到
string newtext = strdup(text);