星期五, 五月 25, 2007

THe reason of iconv segment fault

#include "iconv.h"
#include "stdio.h"
#include "string.h"

int main()
{
iconv_t cd = iconv_open("UCS-2","GB2312");
char *p = "中文";
unsigned short int dst[100] = {0};
size_t leni = strlen(p);
size_t leno = sizeof(unsigned short int)*100;
char* pi = p;
char* po = (char*)&dst;

printf("Input:\t%d:%p:%s->%d:%p:%s\n", leni, p,p, leno, (char*)dst, dst);
printf("Iconv Input\t:%d:%p:%s->%d:%p:%s\n", leni, pi,pi, leno, po,po);
size_t ret = iconv(cd,π,&leni,&po,&leno);
printf("Output\t:%d:%p:%s->%d:%p:%s\n", leni, p,p, leno, (char*)dst, dst);
printf("Iconv Output\t:%d:%p:%s->%d:%p:%s\n", leni, pi,pi, leno, po,po);
printf("Ret=%d\n",ret);
iconv_close(cd);
return ret;
}
--Output
Input: 4:0x804872d:中文->200:0xbf86db84:
Iconv Input :4:0x804872d:中文->200:0xbf86db84:
Output :0:0x804872d:中文->196:0xbf86db84:-N噀
Iconv Output :0:0x8048731:->196:0xbf86db88:
Ret=0
iconv函数会造成指针的修改,如果直接操作&p,会将p直到别的地方!所以出现Segment Fault!

没有评论: