我正在尝试使用Vigenere密码。但是,当我尝试返回数组时,输出末尾会有垃圾字符。
我在做什么错了?
char* sifrele(char* metin)
{
char* sifreliMetin = new char[static_cast<int>(strlen(metin))];
for (int i = 0; i < strlen(metin); i++)
{
char sifreliHarf = metin[i] + sifreAtanamisMetin[i] - 64;
if (sifreliHarf > 90)
sifreliHarf -= 26;
sifreliMetin[i] = sifreliHarf;
}
return sifreliMetin;
}
这是输出:
Metin表示文字,顺便说一句。
文本为19个字符,但输出为23。最后4个为垃圾内容。
答案 0 :(得分:0)
结合各种评论:
分配正确大小的缓冲区:
char* sifreliMetin = new char[static_cast<int>(strlen(metin) + 1)];
确保在for循环之后终止字符串:
sifreliMetin[strlen(metin)] = '\0';
答案 1 :(得分:0)
strlen()不计算表示字符串结束的行尾符号。您应该注意'\ 0'字符以指向行结束。所以做这样的事情:
char* sifrele(char* metin)
{
int len=strlen(metin);
char* sifreliMetin = new char[len + 1];
for (int i = 0; i < len; i++)
{
char sifreliHarf = metin[i] + sifreAtanamisMetin[i] - 64;
if (sifreliHarf > 90)
sifreliHarf -= 26;
sifreliMetin[i] = sifreliHarf;
}
sifreliMetin[len]=0;
return sifreliMetin;
}