C错误 – 返回一个char数组

请考虑以下代码:

char CeaserCrypt(char str[256],int key)
{
    char encrypted[256],encryptedChar;
    int currentAsci;

    encrypted[0] = '\0'; 

    for(int i = 0; i < strlen(str); i++) 
    {
        currentAsci = (int)str[i];
        encryptedChar = (char)(currentAsci+key);
        encrypted[i] = encryptedChar;
    }

    return encrypted;
}

Visual Studio 2010出错,因为该函数返回一个数组.我该怎么办?

我的朋友告诉我将签名更改为void CeaserCrypt(char str [256],char encrypted [256],int key).但我不认为这是正确的.如何摆脱编译错误?

返回类型应该是char *但这只会增加另一个问题.

加密是在CeaserCrypt的堆栈上“分配”的,并且在函数返回时可能无效.由于加密的长度与输入的长度相同,请执行以下操作:

int len = strlen(str);
char *encrypted = (char *) malloc(len+1);

encrypted[len] = '\0';

for (int i = 0; i < len; i++) {
// ...
}

不要忘记稍后释放缓冲区(使用free()).

编辑:@Yosy:不要觉得有必要复制/粘贴.使用它作为指针来改进您的编码实践.此外,为了满足批评者:使用上面的示例传递已分配的指向加密例程的指针.

相关文章
相关标签/搜索