C ++将wchar_t转换为char *

时间:2018-01-15 18:45:42

标签: c++

我的代码存在问题。

我尝试做的是动态获取可执行文件路径,然后将其分配给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;


}

有关如何处理此事的任何想法?提前谢谢!

2 个答案:

答案 0 :(得分:0)

使用wcstombswcstombs_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()