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

thl*_*ood 1 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;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到了这条消息:

a.out: **gconv.c:75:__ gconv:断言** `outbuf!=((void*)0)&&*outbuf!=((void*)0)'失败. *已放弃*

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

unw*_*ind 6

你的第四个论点看起来不对 铸造是一个很好的线索,一些奇怪/混乱的东西正在发生.

你需要传递一个指向指针的指针,你传递一个指向一个字符数组的指针,指向一个指向指针的指针.那不是一回事.

你可能需要:

char output[BUFSIZ], *outp = output;
Run Code Online (Sandbox Code Playgroud)

然后用&outp第四个参数调用它.