libiconv 将字符串从 'ascii' 转换为 'utf-8'?
libiconv convert string from 'ascii' to 'utf-8'?
我正在尝试将字符串从 'ascii' 转换为 'utf-8','lencoded_str' 函数将采用一个指针 char 和 return 另一个指针 char。输入指针 char 大小未知,每次调用 'lencoded_str' 函数时都会更改。我的问题是 'lencoded_str' 函数总是 return 什么都没有。
如有任何帮助,我们将不胜感激。
这只是一个例子
#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 缓冲区的原始值并 return 它。你已经对 out_str_start
有了正确的想法,但你没有使用它:
return out_str_start;
通过直接在 printf
中使用 lencoded_str
中的 return 值而不存储它,您将泄漏 yopu calloc
ed 的内存。你也可以在 strlen
s 上放轻松;你只需要调用一次。
我正在尝试将字符串从 'ascii' 转换为 'utf-8','lencoded_str' 函数将采用一个指针 char 和 return 另一个指针 char。输入指针 char 大小未知,每次调用 'lencoded_str' 函数时都会更改。我的问题是 'lencoded_str' 函数总是 return 什么都没有。
如有任何帮助,我们将不胜感激。
这只是一个例子
#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 缓冲区的原始值并 return 它。你已经对 out_str_start
有了正确的想法,但你没有使用它:
return out_str_start;
通过直接在 printf
中使用 lencoded_str
中的 return 值而不存储它,您将泄漏 yopu calloc
ed 的内存。你也可以在 strlen
s 上放轻松;你只需要调用一次。