[英]C++ How do I return a char array from a function?
我正在尝试使用Vigenere Cipher。 但是,当我尝试返回数组时,输出末尾会有垃圾字符。
我究竟做错了什么?
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个为垃圾内容。
结合各种注释:
分配正确大小的缓冲区:
char* sifreliMetin = new char[static_cast<int>(strlen(metin) + 1)];
确保在for循环之后终止字符串:
sifreliMetin[strlen(metin)] = '\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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.