c++ - 关于strlen的一个奇怪问题

查看:74
本文介绍了c++ - 关于strlen的一个奇怪问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我写了一段程序,有visual studio 2015,从一个文件里读取一个utf8的中文字符串,放入内存。但是遇到了一个奇怪的问题。实际用到的memory大于我分配的。程序段如下:

char *buffer_text;
                char *buffer_out;
                bd_name_len1 = bd_name_len + 4;
                buffer_out = new char[bd_name_len1];
                buffer_text = new char[bd_name_len];
                int k = strlen(buffer_text);
                ifsReadBin.read(buffer_text, bd_name_len);
                int buffer_text_len = (unsigned)strlen(buffer_text);

bd_name_len的长度是21个byte, 但是我读出的东西很多,我取了一下buffer_text的大小,发现k是38个字节。超出了我预期的21个字节,没有想明白身什么原因。谢谢。

解决方案

buffer_text 里 bd_name_len 长度范围内没有 '0', 而 strlen 只有读到 '0' 才会停. 所以读越界了.

这篇关于c++ - 关于strlen的一个奇怪问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆