我试图动态获取可执行路径,然后将其分配给
char* n_argv
数组:
int main (int argc, char** argv){
char szPathToExe[MAX_PATH];
GetModuleFileNameA(NULL, szPathToExe, MAX_PATH);
std::string path(szPathToExe);
path.append("other_argument");
char *n_argv = path.c_str();
argv = n_argv;
}
关于如何解决这个问题有什么想法吗?
使用
wcstombs
或 wcstombs_s
https://msdn.microsoft.com/en-us/library/5d7tc9zw.aspx
size_t wcstombs(
char *mbstr,
const wchar_t *wcstr,
size_t count
);
size_t _wcstombs_l(
char *mbstr,
const wchar_t *wcstr,
size_t count,
_locale_t locale
);
这是一个基于 this 帖子的简单实现,您可以使用:
#include <windows.h>
auto wide_to_char(const WCHAR* source) {
const auto wide_char_file_path_length = wcslen(source);
auto destination_buffer = std::make_unique<char[]>(wide_char_file_path_length + 1);
auto array_index = 0;
while (source[array_index] != '\0') {
destination_buffer.get()[array_index]= static_cast<CHAR>(source[array_index]);
array_index++;
}
destination_buffer.get()[array_index] = '\0';
return destination_buffer;
}