如果这是一个重复的帖子,很抱歉. 我目前遇到了一个问题,我收到关于这段代码的警告,显示为C6386: Buffer overrun while writing to 'titleTextPointer',但我相当确定运行时不会有缓冲区(假设所有标题都以'\0'结尾):

    const char *title = "test";
    int titleLen = 0;
    while (title[titleLen] != '\0') {
        titleLen++;
    }
    WCHAR *titleTextPointer = (WCHAR *)malloc(sizeof(WCHAR) * (titleLen + 1)); //creates a new wide char list(WCHAR array) +1 for a terminating character(\0)
    if (titleTextPointer == NULL) {
        printf("error occured while locating space\n");
        return 1;
    }
    for (int i = 0; i < titleLen; i++) { //iterates through lists and transfers memory
        titleTextPointer[i] = title[i]; //actual transfer (char is 1byte, wide char is 2 bytes)
    }
    titleTextPointer[titleLen] = '\0'; //adds the last terminating value to properly use the widechar in function

code with error attached

我已try 分配更多空间(+2),但仍弹出警告.

推荐答案

您发布的代码没有显示任何缓冲区溢出,因此我认为您的IDE出现了幻觉.我不知道什么是WCHAR,在我的系统中,wchar_t是4字节.请注意@Ikegami的观点,直接赋值可能不是从char *wchat_t *的正确映射.下面是一个最小的(不可重现的)示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>

int main(void) {
    const char *title = "test";
    size_t titleLen = strlen(title);
    wchar_t *titleTextPointer = malloc(sizeof *titleTextPointer * (titleLen + 1));
    if (!titleTextPointer) {
        printf("error occurred while locating space\n");
        return 1;
    }
    for (size_t i = 0; i <= titleLen; i++)
        titleTextPointer[i] = (unsigned char) title[i];
    free(titleTextPointer);
}

C++相关问答推荐

将指针作为参数传递给函数

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

获取每个循环迭代结束时的当前时间

什么是.c.h文件?

为什么指针运算会产生错误的结果?

-Wnonnull-Compare警告不是具有误导性吗?

Fprintf正在写入多个 struct 成员,并且数据过剩

安全倒计时循环

如何摆脱-WIMPLICIT-Function-声明

在C中使用无符号整数模拟有符号整数

OMP并行嵌套循环

存储和访问指向 struct 的指针数组

C程序printf在getchar while循环后不工作

如何找出C中分配在堆上的数组的大小?

在 C 中传递参数时出现整数溢出

当循环变量在溢出时未定义时,可以进行哪些优化?

在 C 语言中,不使用 sscanf 从字符串中读取数据

如何从文件中读取一长串数据?

函数内使用全局变量会导致创建一个本地副本吗?

为什么我的内核模块中出现Inappropriate ioctl for device错误?