在Linux中使用iconv lib进行C编程

时间:2012-02-22 13:52:40

标签: c linux iconv

这是我的代码:

#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!=((void *)0)&amp;&amp; * outbuf!=((void *)0)'失败。 * 已放弃 *

我找不到任何问题,我感到无助〜我不擅长英语

1 个答案:

答案 0 :(得分:6)

你的第四个论点看起来错了。铸造是一个很好的线索,一些奇怪/混乱的事情正在发生。

你需要传递一个指向指针的指针,你传递一个指向字符数组的指针强制转换为指向指针的指针。这不是一回事。

您可能需要:

char output[BUFSIZ], *outp = output;

然后用&outp作为第四个参数调用它。