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也拷贝到内存中,于是就出现了描述的错误

  • 相关阅读:
    算法题--无重复字符的最长子串
    算法题--数字反转
    算法题--两数之和
    idea下把svn项目改为git项目的小技巧
    window下查看zookeeper节点信息
    C++知识点总结
    Qt读写Json格式配置文件
    Git基础命令学习
    QML学习笔记
    AE开发之默认滚轮缩放功能反置(C#修改注册表数据)
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/9249057.html
Copyright © 2011-2022 走看看