Visual Studio 在使用指针和 strncat 时触发断点

Posted

技术标签:

【中文标题】Visual Studio 在使用指针和 strncat 时触发断点【英文标题】:visual studio triggered a breakpoint when used pointer and strncat 【发布时间】:2022-01-18 12:40:24 【问题描述】:

我正在使用以下代码实现 JSON 分包器

int main()

  char* serializedMessage;
  serializedMessage = (char*)malloc(sizeof(char)* 1024);

  if (serializedMessage != NULL)
  
    strcat(serializedMessage, "\"");
    strncat(serializedMessage, "\":", 3);
    strncat(serializedMessage, "", 1);
    strncat(serializedMessage, "\"ds\":[", 8);
    strncat(serializedMessage, "", 1);
    std::cout  <<serializedMessage <<std::endl;
   
  return 0;

在 Visual Studio 中运行时,它会在触发断点时引发错误。我错过了什么。任何建议

【问题讨论】:

strncat 中的整数应该与您要附加的字符数相匹配。我不确定,但"\":" 不是两个字符吗? (你正在逃避一个) 【参考方案1】:

您只能在 C 字符串 的目标上使用strcat 系列函数。 serializedMessage 在您的代码中还不是 C 字符串,它是一块未初始化的内存。 How should character arrays be used as strings?

通过在开头添加一个空终止符来解决这个问题,形成一个空字符串:

if (serializedMessage != NULL)

  serializedMessage[0] = '\0';
  ...

【讨论】:

以上是关于Visual Studio 在使用指针和 strncat 时触发断点的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio中智能指针对象的自定义视图?

C++ Visual Studio 非标准语法使用 '&' 创建指向成员的指针

如何在带有 Visual Studio 的 dll 导出类中使用唯一指针向量

C++ 指针使用 Visual Studio 更改地址,而不是使用 OsX 中的 Xcode 或 Linux 中的 gcc

为啥 Visual Studio 2010 (Intellisense) 会停止生成接口指针?

C++ Visual Studio 2015“非标准语法;使用 '&' 创建指向成员的指针”