加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C错误 – 返回一个char数组

发布时间:2020-12-16 10:50:37 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: char CeaserCrypt(char str[256],int key){ char encrypted[256],encryptedChar; int currentAsci; encrypted[0] = ''; for(int i = 0; i strlen(str); i++) { currentAsci = (int)str[i]; encryptedChar = (char)(currentAsci+key); enc
请考虑以下代码:

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

    encrypted[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] = '';

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读