[英]libiconv convert string from 'ascii' to 'utf-8'?
我正在嘗試將字符串從'ascii'轉換為'utf-8','lencoded_str'函數將使用一個指針char並返回另一個指針char。 輸入指針的char大小是未知的,並且每次調用“ lencoded_str”函數時都會改變。 我的問題是'lencoded_str'函數始終不返回任何內容。
任何幫助將非常感激。
這只是一個例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>
char *lencoded_str(char *in_str){
iconv_t iconv_obj = iconv_open("utf-8","ascii");
char *out_str = calloc(strlen(in_str) * 2, sizeof(char));
char *out_str_start = out_str;
size_t in_str_bytes_left = strlen(in_str);
size_t out_str_bytes_left = strlen(in_str) * 2;
int iconv_return = iconv(iconv_obj, &in_str, &in_str_bytes_left, &out_str, &out_str_bytes_left);
iconv_close(iconv_obj);
return out_str;
}
int main( ){
printf("out: %s\n", lencoded_str("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"));
printf("out: %s\n", lencoded_str("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"));
printf("out: %s\n", lencoded_str("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"));
}
iconv
前進腳趾輸入和輸出字符串指針,以便它們指向轉換后的字符串的末尾。
這意味着您必須保存char緩沖區的原始值並返回它。 您已經使用out_str_start
有了正確的主意,但是您沒有使用它:
return out_str_start;
通過直接在printf
使用lencoded_str
的返回值而不存儲它,您將泄漏yopu calloc
ed的內存。 您也可以在strlen
上輕松進行; 您只需要調用一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.