异常:使用 strcpy_s 时访问冲突写入位置

Exception: Access violation writing location when using strcpy_s

当我编译下面的代码时,我得到这个异常:

console.exe 中 0x0FA8E90F (ucrtbased.dll) 的未处理异常:0xC0000005:访问冲突写入位置 0xFFFFFFCD

 void test()
{
      char *type = malloc(sizeof(char) * 256);
      strcpy_s(*type, 7,"Laptop");
}

我不得不提一下,我是使用动态实现和指针的初学者。我也不允许使用静态实现。

在上面的代码片段中,我还尝试了不同的实现方式:替换以下行:

  strcpy_s(*type, 7,"Laptop");

这一行:

  strcpy(*type, "Laptop");

但结果是一样的。对我的问题有什么建议吗?

提前致谢。

而不是 strcpy_s(*type, 7,"Laptop"); 你想要 strcpy_s(type, 7,"Laptop");

strcpy_s 假定第一个参数是指向数据目的地的指针,根据签名:errno_t strcpy_s(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC)

在您的代码中,您在将指针 type 传递给 strcpy_s 时取消引用它,这就是问题所在。因为该函数需要 char * 作为第一个参数,所以当您传递 *type 而不是 type 时,就好像您传递了 char 然后被错误地解释为指针(内存位置)。当 strcpy_s 尝试写入这个无效的内存位置时,它会抛出您看到的访问冲突异常。请注意,这与 strcpy 给您相同结果的原因相同。