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

Posted

技术标签:

【中文标题】c++ 在 Windows 上使用带有 Mingw 编译器的 iconv【英文标题】:c++ using of iconv on Windows with Mingw compiler 【发布时间】:2013-01-03 23:12:27 【问题描述】:

美好的时光!

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

简化代码:

 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 上,它可以编译并正常工作。使用 Mingw 我会遇到错误:

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

提前致谢!

添加 我的 Mingw 版本是 4.4.0 GCC 版本是 4.7.2

【问题讨论】:

你的 MinGW 使用什么版本的 GCC? Mingw 版本是 4.4.0,GCC 版本是 4.7.2 【参考方案1】:

感谢大家的关注,问题解决了,但是我觉得很奇怪(目前还不清楚)

虽然函数有这样的原型,

MinGW 应该这样称呼它:

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

【讨论】:

【参考方案2】:

查看这些声明:

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

外观和感觉相同,但是:

指向整数数组的指针 (*b) 与整数数组 (a) 不同!所以指向数组的指针(*)和指向指针的指针(**)也不一样!

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

【讨论】:

感谢您注册并回答我的问题

以上是关于c++ 在 Windows 上使用带有 Mingw 编译器的 iconv的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上使用 MinGW 编译 C++ 时找不到 omp.h

C++:如何在 Windows 10 上使用编译器 MinGW 9.2.0 安装 OpenCV

尝试在 Windows 上执行 C++ 时出错(通过 MinGW 编译)

MinGW 链接器错误:winsock

如何在带有 MinGW 的 Windows 中使用 <gdal/gdal.h>?

windows中使用mingw64编译dlib的c++