这是我的代码:
#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)'失败。 * 已放弃 *
我找不到任何问题,我感到无助〜我不擅长英语
答案 0 :(得分:6)
你的第四个论点看起来错了。铸造是一个很好的线索,一些奇怪/混乱的事情正在发生。
你需要传递一个指向指针的指针,你传递一个指向字符数组的指针强制转换为指向指针的指针。这不是一回事。
您可能需要:
char output[BUFSIZ], *outp = output;
然后用&outp
作为第四个参数调用它。