【问题标题】:How can i solve this warning C6386我该如何解决这个警告 C6386
【发布时间】:2021-05-01 01:24:11
【问题描述】:

如何解决在 for 循环内的行出现的 C6386 警告?

reverseString[i] = str[size - i - 1]; 此行出现警告。

确切的错误是:“C6386:写入‘reverseString’时缓冲区溢出:可写大小为‘((size+1))*sizeof(char)’字节,但可能写入‘2’字节。”

功能如下:

char* reverseString(char* str) {
    if (str == NULL) {
        printf("input error\n");
        return NULL;
    }

    int size = strlen(str);
    char* reverseString = malloc((size + 1) * sizeof(char));
    if (reverseString != NULL) {
        for (int i = 0; i < size; i++) {
            reverseString[i] = str[size - i - 1];
        }
        reverseString[size] = '\0';
        
        return reverseString;
    }
    else {
        printf("error while allocating memory\n");
        return NULL;
    }
}

【问题讨论】:

  • 你确定错误是指这个确切的代码吗?我看不出有什么问题。不过请注意,最好不要将变量命名为与函数相同的名称。

标签: c visual-studio warnings compiler-warnings


【解决方案1】:

here找到这个警告出现的原因。

对于这个特定的示例,由于“size + 1”永远不会变为 0,因此可以忽略此警告。如果我在调用 malloc 之前检查 'size + 1' 是否大于 0,警告就会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 2021-07-01
    • 2020-10-24
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多