提问人:SaffronBrick 提问时间:5/1/2021 更新时间:5/1/2021 访问量:884
如何解决此警告 C6386
How can i solve this warning C6386
问:
如何解决在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;
}
}
答:
3赞
SaffronBrick
5/1/2021
#1
从这里找到出现此警告的原因。
对于此特定示例,由于“size + 1”永远不会变为 0,因此可以忽略此警告。如果我在调用 malloc 之前检查“size + 1”是否大于 0,警告就会消失。
评论