char *转string遇到诡异的问题记录

Posted wangshaowei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char *转string遇到诡异的问题记录相关的知识,希望对你有一定的参考价值。

这个问题的背景是在用libevent的buffer_remove时出现的,写一个伪代码

char buffer[2048] ={0};
string str;
int n = buffer_remove(buffer,sizeof(buffer));
str = string(buffer);

  在这里断点调试时发现buffer的数据是正确的,转到str时,总会在字符串的结尾出现几个乱七八糟的字符且每次都不一样.

下面说一下原因,首先我们都知道每个字符串是以‘‘(即0)结尾的,而buffer_remove在从libevent的内存移到我们自己的buffer里时,是不会对字符串做改变的,接收到什么就往buffer理写什么,所以在断点调试时看到buffer里有2048个字符时,实际上是没有‘‘的,之所以能看到字符串大概是因为IDE的原因?

  在string构造时,它是会找参数的的buffer *直到遇到‘’,并把这些深拷贝到string的成员变量char *中,所以如果我们的buffer没有‘‘,在找到buffer的第2048个字符后,就会继续在不属于buffer的内存里找(buffer后的这块内存很可能是混乱地),直到找到内存为0的地方停止。比如11 1a 34 57 00,11为buffer[2047],则string构造时会把1a 34 57也拷贝到内存中,于是就出现了描述的错误

以上是关于char *转string遇到诡异的问题记录的主要内容,如果未能解决你的问题,请参考以下文章

char[] 转换成cstring

string,const char*, char*转换之后还是指向同一片内存地址么?

MFC 中char转CString问题

arduino String转char *

记录一则xtts测试遇到的诡异现象

char[]转string的问题