首页 > 解决方案 > strcpy_s 函数在我的代码中不起作用

问题描述

该函数应该将 char[] 复制到分配的存储中。由于某种原因,缓冲区对于此操作总是太小。

str(char* f) {

    len = strlen(f);
    txt = (char*)malloc(len); //txt is a pointer to a char
    strcpy_s(txt, len, f);

}

标签: c++buffer-overflow

解决方案


由于某种原因,缓冲区对于此操作总是太小。

您忘记为空终止符分配内存。一个空字符串需要一个字符(终止符)的空间。长度为 1 的字符串需要两个字符 (1 + 1) 的空间。一个长度的字符串len需要len + 1字符空间。

那说:

  • 在 C 中,请strdup改用。
  • 在 C++ 中,不要使用strlen, mallocnor strcpy_s(nor strdup)。我推荐std::string

推荐阅读