C ++如何从函数返回char数组?

时间:2018-12-21 13:40:23

标签: c++

我正在尝试使用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;
}

这是输出:

image

Metin表示文字,顺便说一句。

文本为19个字符,但输出为23。最后4个为垃圾内容。

2 个答案:

答案 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;
}