読者です 読者をやめる 読者になる 読者になる

iconvとヌル終端文字

昨日の戸惑った点。
iconvは出力にヌル終端文字を付加してくれはしないので、outbytesleftを見て何バイト分書かれたかを計算しそこからヌル終端文字を付加する必要がある。

if(iconv(iconv_cd, &iconv_in, &iconv_inbytesleft, &iconv_out, &iconv_outbytesleft) == -1){
        fprintf(stderr, "Error: iconv() failed\n");
        return -1;      
}               

/* get length of conv_cur_line by iconv_outbytesleft */
len_conv_cur_line = len_cur_line * 2 - iconv_outbytesleft;
/* set zero to the end of the string */
conv_cur_line[len_conv_cur_line - 2] = '\0';
len_conv_cur_line = len_conv_cur_line - 2;