2016-07-15 119 views
-3

,所以我试图用凯撒密码与char *的,我写了一个简单的函数出来是这样的:使用char *的凯撒密码? C++

char * Encrypt(char * s, int k) 
{ 
    char * c = s; 

    for(int i = 0; i < strlen(s); i++) 
     c[i] += k; 

    return c; 
} 

,这似乎看起来像它应该工作,但事实并非如此。运行程序时会引发错误。

这里是我如何调用该函数的一个例子:“为什么不直接使用string

int main() 
{ 
    cout << Encrypt("hello", 2) << endl; 
    system("pause"); 
    return 0; 
} 

和你说之前,那么答案是我在某SDK使编写C++使用string时出现编译错误。好的,但是,任何形式的帮助将不胜感激,谢谢!

+0

如果你不是(或不能)使用'std :: string',那么你应该使用正确的C库函数*将Source的内容复制到适当大小的数组中。否则,你正在修改'Source'。 – crashmstr

+0

请记住,char无符号短小,如果您的密钥超出char范围以外的值,则加密可能无效。 –

+2

让我猜,你用字符串文字调用这个函数?请尝试创建[最小化,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们显示。特别是你如何调用这个函数。 –

回答

6

"Hello"这样的字符串文字是只读。如果您尝试修改这样的字符串,您将有未定义的行为

在C++中字符串文字实际上是常量个字符的数组。

使用char*来访问字符串文字应该让你的编译器在你尖叫一个警告。如果不是,则需要调高警戒级别或启用更多警告。

如果你真的用C++编程,我建议你学习std::stringfind a good beginners book来阅读。

+0

这是问题的修改。一个好的编译器/执行系统只会在只读存储器中使用常量字符串。 – zaph