工作中遇到一个转码的问题,如下代码说话

void encode_convert(iconv_t& cd, const char* str, size_t str_len,
std::string* out)
{
char utf_buf[kMaxCoding] = {};
char* pout = utf_buf;
char* pin = const_cast<char*>(str);
size_t from_len = str_len;
size_t to_len = sizeof(utf_buf);
if (iconv(cd, &pin, &from_len, &pout, &to_len) == (size_t) -)
{
fprintf(stderr, "convert for %s", str);
}
out->assign(utf_buf);
}

这段代码没问题,运行得很好,但后来 kMaxCoding 定义在其它文件中了,所以我把它作为参数传递过来了,但编译无法过。

只能修改成为这样

void encode_convert(iconv_t& cd, const char* str, size_t str_len,
std::string* out, const size_t max_coding_size)
{
char utf_buf[max_coding_size];
utf_buf[] = '\0'; //trick
char* pout = utf_buf;
char* pin = const_cast<char*>(str);
size_t from_len = str_len;
size_t to_len = sizeof(utf_buf);
if (iconv(cd, &pin, &from_len, &pout, &to_len) == (size_t) -)
{
fprintf(stderr, "convert for %s", str);
}
out->assign(utf_buf);
}

但此时就会在转换后的string中多一个y 字符串。

如果将标黄的代码转换为 memset(utf_buf, 0, sizeof(utf_buf));就会没问题了,我想应该是转码可能没有加\0什么的。

在查看了 在Linux下使用iconv转换字符串编码 的iconv接口函数说明后,我将assign 段修改为

out->assign(utf_buf, sizeof(utf_buf) - to_len);

清净了。

最新文章

  1. Android ANR产生的原理和如何避免
  2. Daily Scrum 12.5
  3. 【iOS开发必备指南合集】申请企业级IDP、真机调试、游戏接入GameCenter 指南(实现仿官方的成就提示)、游戏接入OpenFeint指南;
  4. lintcode:Compare Strings 比较字符串
  5. apache开源项目 -- tajo
  6. 让hyper-v调整console的大小
  7. LightOJ DNA Prefix(字典树+dfs)
  8. DJango内建模板转向jinja2的小脚本
  9. Lucene入门简介
  10. MVC 使用缓存
  11. MSTM年底总结
  12. arcgis 10 File GDB转成9.3 File GDB
  13. day27 封装
  14. STL基础--迭代器和算法
  15. (转)CS域和PS域
  16. ADO.NET操作PostgreSQL:数据库操作类(已封装)
  17. 四种传值方法(通知、block、属性、NSUserDefaults)
  18. Django中settings设计模式(单例模式)
  19. PHP 表单 - 4(验证邮件和URL)
  20. 「LibreOJ β Round #4」框架

热门文章

  1. 关于VECTOR和DEQUE
  2. 从svn检出的项目如何编译
  3. WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data
  4. HDU 1517 (类巴什博奕) A Multiplication Game
  5. HDU 1506 Largest Rectangle in a Histogram
  6. Linux diff patch
  7. mysql,多对多的hibernate操作对应的jdbc操作
  8. python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)
  9. unity, sprite atlas
  10. [再寄小读者之数学篇](2014-11-19 $\tan x/x$ 在 $(0,\pi/2)$ 上递增)