2012-02-22 45 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