Невозможно преобразовать 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;
}