使用带有Mingw编译器的Windows上的iconv c ++

时间:2013-01-03 23:12:27

标签: c++ windows mingw iconv

一天中的好时光!

我在Ubuntu上用g ++ 4.7.2成功编译了这段代码,但是我在使用Mingw在Windows上编译它时遇到了问题。

简化代码:

 size_t string_length=some_size;
 char arr_symb[string_length+1];

 char *outputde=arr_symb;
 iconv_t type=iconv_open("UTF-8","WINDOWS-1251");

char output[some_size];

char *p1=arr_symb;
char *p2=output;

if (   iconv(type, &p1,&string_length, &p2, &output_length ) == -1 )// here 
        // is mistake, it doesn't like pointers p1 and p2 but I wonder why

  log_info("something went wrong");

在使用G ++的Linux上,它可以编译并且可以正常工作。有了明,我得到了错误:

enter image description here

我想知道,如果它与g ++一起工作正常,为什么mingw会把它视为错误?

提前致谢!

ADDITION
我的Mingw版本是4.4.0
GCC版本是4.7.2

2 个答案:

答案 0 :(得分:1)

感谢大家的关注,问题解决了,但这对我来说都很奇怪(目前还不清楚)

虽然该功能有这样的原型,

enter image description here

使用MinGW应该这样调用:

enter image description here

所以,问题是MinGW的输入字符串应该作为常量传递(也没有这样的原型)。

答案 1 :(得分:1)

查看这些声明:

  int  a[10];
  int* b = malloc(10 * sizeof(int));

看起来和感觉一样,但是:

指向整数数组 (*b) 的指针与整数数组 (a) 不同!所以指向数组的指针 (*) 也不等同于指向指针的指针 (**)!

指针的解引用需要再上一层!