C программирование с помощью iconv lib в Linux - PullRequest
1 голос
/ 22 февраля 2012

Это мой код:

#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) && * outbuf! = ((void *) 0) 'не удалось. * 已 放弃 *

Я не могу найти никаких проблем и чувствую себя беспомощным ~ Я не очень хорошо знаю английский

1 Ответ

6 голосов
/ 22 февраля 2012

Ваш четвертый аргумент выглядит неправильно. Кастинг - хорошая подсказка, что происходит что-то странное / запутанное.

Вам нужно передать указатель на указатель, вы передаете указатель на массив символов , приведенный к указателю на указатель . Это не одно и то же.

Вам, вероятно, нужно:

char output[BUFSIZ], *outp = output;

Затем вызовите его с &outp в качестве четвертого аргумента.

...