我的代码存在问题。
我尝试做的是动态获取可执行文件路径,然后将其分配给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;
}
有关如何处理此事的任何想法?提前谢谢!
答案 0 :(得分:0)
使用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
);
答案 1 :(得分:0)
这是一个基于this帖子的简单实现,您可以使用:
inline CHAR* wide_to_char(const WCHAR* source)
{
const auto wide_char_file_path_length = wcslen(source);
const auto destination_buffer = static_cast<char*>(malloc(wide_char_file_path_length + 1));
auto array_index = 0;
while (source[array_index] != '\0')
{
destination_buffer[array_index] = static_cast<CHAR>(source[array_index]);
array_index++;
}
destination_buffer[array_index] = '\0';
return destination_buffer;
}
注意:使用完目标缓冲区后,您必须再次free()
。