wcscat_s函数 - 缓冲区错误

时间:2013-07-22 08:59:52

标签: 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

上太小

1 个答案:

答案 0 :(得分:1)

您只为[{1}}分配new_buff个字符(并告诉dir_path该大小),然后您想为其添加更多字符。您需要将wcscat_s 分配为new_buff的长度,并告诉L"\\directory"该实际尺寸。