zoukankan      html  css  js  c++  java
  • 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也拷贝到内存中,于是就出现了描述的错误

  • 相关阅读:
    简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法
    适配器模式(Adapter Pattern)
    什么样的登录框才算是优秀的?
    transient的作用及序列化
    MySQL索引实现原理
    concurrentHashMap原理分析和总结(JDK1.8)
    HashMap实现原理(JDK1.8)
    深入理解Java中的IO
    多线程系列
    多线程系列
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/9249057.html
Copyright © 2011-2022 走看看