关于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个字节,没有想明白身什么原因。谢谢。

阅读 2.4k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题