c - 我该如何解决这个警告 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;
}
}
解决方案
从这里找到发生此警告的原因。
对于这个特定的例子,因为 'size + 1' 永远不会变成 0,所以可以忽略这个警告。如果我在调用 malloc 之前检查“size + 1”是否大于 0,警告就会消失。
推荐阅读
- python - 如何将计数器元素添加到元组中的 *each* 重复值?
- python - 从函数创建多维数组/列表
- ruby-on-rails - 使用 Ruby on Rails 将许多 CSV 文件导入 PostgreSQL 数据库
- prolog - 序言 | 获取一个列表,其中元素与其他列表和常量值一起计算
- coq - 被证明卡住了
- javascript - 如何连接字符串和 int 并在数组中找到它的值?
- google-sheets - Google 表格:调整数组公式以自动出现在每一行中
- java - 如何通过 POJO 类从 firebase 实时数据库中读取嵌套父节点的值?
- c# - 在 C# 中复制 JSON 文件
- sensors - 带有状态的 Fiware 执行器/传感器开关模式