【发布时间】:2013-05-19 12:03:49
【问题描述】:
我有一些代码在 Linux 上使用 iconv() 来验证字符串是否为 UTF-8 编码。我创建的转换如下:
iconv_t c = iconv_open("UTF-8","UTF-8");
我像这样运行 iconv():
int status = iconv(c, &fromArray, (size_t*)&inSize, &toArray, (size_t*)&outSize);
然后,如果 status 不是 -1,我将字符串设为有效的 UTF-8。
这可以在 32 位环境(最初开发和测试的环境)中编译并正常工作。但是我现在需要让它在 64 位环境中工作(具体来说,我相信 Fedora 14 的 64 位版本)。当我对此进行编译并运行测试时,status 始终是 -1,并且我总是在 errno 中得到一个 EILSEQ 错误,即使对于 32 位编译所说的相同字符串也可以。
有没有人知道为什么会发生这种情况?
【问题讨论】:
-
虽然这可能不是问题,但
inSize和outSize是什么?我问的原因是,如果类型与size_t的大小不同,将它们转换为(size_t *)可能会导致问题。 -
确实,这就是问题所在。他们原本应该是
ints,而本来应该是size_ts。更改类型停止了崩溃。当然,在我编写此代码时,执行此操作的代码现已失效,但我想为后代确认这一点。 :)