【问题标题】:Cannot convert ‘char**’ to ‘wchar_t**’无法将“char**”转换为“wchar_t**”
【发布时间】:2015-09-25 02:15:14
【问题描述】:

代码摘录:

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

产生错误信息

错误:无法将参数“2”的“char**”转换为“wchar_t**”到“void PySys_SetArgv(int, wchar_t**)”

如何转换argv

【问题讨论】:

  • ‘wchar_t’ 是两者的一部分?
  • 两者都有int 类型,就像Python 和Java 一样!但是每种语言的解决方案都会有所不同!
  • 好的,我正在学习 :) 将更改为 c...

标签: c char wchar-t python-bindings


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    参考以下链接:

    how to convert char array to wchar_t array?

    你可以编写一个转换例程:

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

    【讨论】:

      【解决方案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);
      }
      

      【讨论】:

      • @Olaf 这就是我提到伪代码的原因。它基本上主要是关于这个想法。我认为这可以视为答案,因为这最有可能解决问题中的问题,不是吗?我一点也不了解 C++,只是一些基础知识....
      • 其实我不怪你。 OP 应该只选择一种语言。 malloc 问题本身就是一个常见的解决方案——好吧——“复杂”。这就是为什么我实际上对这个问题投了反对票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多