Mac*_*ack 6 c++ winapi cstring
我正在使用win32检索环境变量GetEnvironmentStrings().它返回一个char*.
我想搜索这个字符串(字符串指针)的特定环境变量(是的,我知道我可以使用,GetEnvironmentVariable()但我这样做,因为我也想在控制台上打印所有的环境变量 - 我只是摆弄) .
所以我想我会转换char*为std :: string并使用find(我知道我也可以使用c_string find函数,但我更关心的是尝试将a复制char*到a中std::string).但是下面的代码似乎并没有将所有内容复制char*到std::string(它让我觉得有一个\0字符,char*但它实际上并不是结束).
char* a = GetEnvironmentStrings();
string b = string(a, sizeof(a));
printf( "%s", b.c_str() ); // prints =::=
Run Code Online (Sandbox Code Playgroud)
有没有办法将a复制char*到a std::string(我知道我可以strcpy()用来复制const char*到字符串而不是a char*).
您不想sizeof()在此上下文中使用 - 您只需将值传递给构造函数即可.char*平凡地成为const char*,你不想使用strcpy或printf任何一个.
这是传统的C字符串 - 然而GetEnvironmentStrings()返回一些奇怪的格式,你可能需要手动插入它.
const char* a = GetEnvironmentStrings();
int prev = 0;
std::vector<std::string> env_strings;
for(int i = 0; ; i++) {
if (a[i] == '\0') {
env_strings.push_back(std::string(a + prev, a + i));
prev = i;
if (a[i + 1] == '\0') {
break;
}
}
}
for(int i = 0; i < env_strings.size(); i++) {
std::cout << env_strings[i] << "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |