为什么我的琴弦会无意中发生变化?

时间:2015-06-30 00:41:19

标签: c++

我在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字符串。

另外,我已经包含了一些头文件。

为什么文字会改变?

1 个答案:

答案 0 :(得分:0)

我认为您已将string类型定义为:

typdef char * string;

在这种情况下,请更改

string newtext = text;    /// Here, both point to same memory

string newtext = strdup(text);