【发布时间】:2021-11-16 15:24:42
【问题描述】:
我想用 Windows 环境路径扩展一个字符串 ("%LOCALAPPDATA%/test.txt")。以下函数原则上可以完成这项工作,但是使用相同的输出字符串再次调用它(或在调用函数之前为输出字符串分配一些值)会产生段错误。
显然我通过将char* 转换为std::string 犯了一些(可能非常糟糕)错误,但我真的不明白这里发生了什么(除了一些内存地址稍后不可用的事实) .
#include "processenv.h"
void expandWindowsString(const std::string &input, std::string &output)
{
const char* in = input.c_str();
char* out;
ExpandEnvironmentStrings(in, out, 1024);
output = out;
}
int main(int argc, char *argv[])
{
std::string path;
expandWindowsString("%LOCALAPPDATA%/test.txt", path);
std::cout << "path is " << path << std::endl;
//works fine so far, but if I execute the function again (with 'path') or initialising path beforehand with std::string path = "", a segfault occurs.
expandWindowsString("%LOCALAPPDATA%/test.txt", path); // commenting out this line, makes the code work.
std::cout << "path is " << path << "\n";
}
【问题讨论】:
-
ExpandEnvironmentStrings是什么? -
@463035818_is_not_a_number: expandenvironmentstringsa
-
char* out; -> char out[1024]; -
很遗憾,你第一次尝试也是UB,但是好像可以。
标签: c++ string winapi segmentation-fault char