c++ - wcscat_s 函数 - 缓冲区错误

标签 c++ windows string pointers concatenation

问题很简单:这段代码有什么问题?

  size_t  buff = 1;
  size_t  new_buff;
  WCHAR   *var_path;
  WCHAR   *dir_path;

  var_path = new WCHAR[buff];
  new_buff = GetEnvironmentVariableW(L"APPDATA", var_path, buff);

  if (new_buff == 0) {
    return 1;
  } else if (new_buff > buff) {
    delete[] var_path;

    var_path = new WCHAR[new_buff];
    GetEnvironmentVariableW(L"APPDATA", var_path, new_buff);
  }

  dir_path = new WCHAR[new_buff];
  wcscpy_s(dir_path, new_buff, var_path);
  wcscat_s(dir_path, new_buff, L"\\directory");

它说 wcscat_s 上的 Buffer 太小了

最佳答案

您只为 dir_path 分配了 new_buff 个字符(并告诉 wcscat_s 这个大小),然后您想要向它追加更多的字符。你需要分配new_buff加上L"\\directory"的长度,同时告诉wcscat_s关于实际大小。

关于c++ - wcscat_s 函数 - 缓冲区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783456/

相关文章:

c - 为什么这个程序会出现段错误

javascript - Rg。 OnWebKitInitialized 未被调用

windows - 从批处理文件在 Windows 中运行 Tomcat 7

c# - Windows 服务 - 启动时崩溃

java - 如何在一种方法中调用另一种方法中的整数?

string - 在 Delphi 中将行添加到备忘录顶部

c++ - 如何在Qt 窗口的标题栏中包含一个图标?

c++ - 作者在 GotW #53 中想表达什么?

c++ - 当分配值的类型可以容纳它时,为什么根据数据类型计算会发生溢出

Esky 的 Python 项目结构