将 wchar_t 转换为 char*

问题描述 投票:0回答:2

我试图动态获取可执行路径,然后将其分配给

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;
}

关于如何解决这个问题有什么想法吗?

c++
2个回答
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
投票

这是一个基于 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.