Невозможно преобразовать char** в wchar_t**

Выдержка из кода:

int main(int argc, char *argv[]){  
    PySys_SetArgv(argc, argv);

выдает сообщение об ошибке

ошибка: невозможно преобразовать 'char**' в 'wchar_t**' для аргумента '2' в 'void PySys_SetArgv(int, wchar_t**)'

Как мне конвертировать argv?

3 ответа

Решение

Этот 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);
}

Вы можете посмотреть, поддерживает ли ваш компилятор wmain. Если это так, вы можете заменить main с:

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

Обратитесь к следующей ссылке:

как преобразовать массив символов в массив 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;
}
Другие вопросы по тегам