簡體   English   中英

libiconv將字符串從“ ascii”轉換為“ utf-8”嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM