2012-02-22 43 views
1

的iconv LIB这是我的代码:C编程在Linux中

#include <stdio.h> 
#include <string.h> 
#include <iconv.h> 

int main() 
{ 
    char input[BUFSIZ]; 
    char output[BUFSIZ]; 
    size_t insize = BUFSIZ; 
    size_t outsize = BUFSIZ; 

    char **inp = (char **)input; 
    char **outp = (char **)output; 

    iconv_t cd = iconv_open("gb2312", "utf-8"); 

    memset(input, '\0', sizeof(input)); 
    memset(output, '\0', sizeof(output)); 
// freopen("input", "r", stdin); 
    scanf("%s", input); 
    insize = strlen(input); 

    iconv(cd, inp, &insize, outp, &outsize); 
    printf("%s\n", output); 
    iconv_close(cd); 
    return 0; 
} 
当我运行它

,我得到这个消息:

的a.out: ** gconv.c:75 :__gconv:断言** `的outbuf =((无效*)0)& & * outbuf中=((无效*)0)”失败! * 已放弃 *

我没有发现任何问题,我感到很无奈〜我不擅长英语

回答

6

你的第四个参数看起来是错误的。铸造是一个很好的线索,有些奇怪/困惑正在发生。

您需要将它传递给指针的指针,您将它传递给指向指向的指针的字符数组的指针。这不是一回事。

你可能需要:

char output[BUFSIZ], *outp = output; 

然后用&outp称其为第四个参数。

+0

认为,It'work完美的〜如果你觉得这是正确的 – thlgood 2012-02-22 14:01:46

+1

@thlgood随意接受的答案。 – unwind 2012-02-22 14:16:48