我写了一段程序,有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' 才会停. 所以读越界了.