无法将'char **'转换为'wchar_t **'

3
代码片段如下:
int main(int argc, char *argv[]){  
    PySys_SetArgv(argc, argv);

产生错误信息

错误:无法将'char **'转换为'wchar_t **',用于参数'2',以便'void PySys_SetArgv(int,wchar_t **)'

我该如何转换argv


2
请参见例如https://dev59.com/Fmsz5IYBdhLWcg3wOlWh。 - Simon
"wchar_t" 是两者的一部分吗? - user1561108
而且它们都有一个“int”类型,就像Python和Java一样!但是对于每种语言,解决方案都是不同的! - too honest for this site
好的,我正在学习 :) 将更改为C... - user1561108
3个回答

3

您可以查看编译器是否支持 wmain。如果支持,可以将 main 替换为:

int wmain(int argc, wchar_t *argv[])
{  
    PySys_SetArgv(argc, argv);

2
请参考以下链接:

如何将char数组转换为wchar_t数组?

您可以编写一个转换函数:
#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;
using namespace System;


int main(int argc, char* argv[])
{
    char *orig = "Hello, World!";
    cout << orig << " (char *)" << endl;

    // Convert to a wchar_t*
    size_t origsize = strlen(orig) + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t wcstring[newsize];
    mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
    wcscat_s(wcstring, L" (wchar_t *)");
    wcout << wcstring << endl;
}

1
这个API是Python 3.0及以上版本的一部分,据我所知,没有简单的方法可以完成此操作。但是,我认为您可以尝试将argv转换为w_char **,然后调用PySys_SetArgv()。在这种情况下,mbstowcs()可能会有所帮助。
例如,一些伪代码(未经测试)如下:
wchar_t **changed_argv;

changed_argv = malloc((argc)* sizeof*changed_argv);

for (int i = 0; i < argc, i++)
{
    changed_argv[i] = malloc(strlen(argv[i]) + 1);
    mbstowcs(changed_argv[i], argv[i], strlen(argv[i]) + 1);
}

1
@Olaf 这就是为什么我提到了伪代码。它基本上主要是关于想法的。我认为这可以被视为答案,因为这很可能解决问题,不是吗?我对C++一点也不了解,只知道一些基础知识... - Sourav Ghosh
1
我其实不怪你。OP应该只选择一种语言。仅仅是malloc问题就足以让一个通用解决方案变得“复杂”。这就是为什么我实际上对这个问题进行了负投票。 - too honest for this site

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接