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

  • 相关阅读:
    mysql数据库(12)--进阶二之索引
    mysql数据库(11)--进阶一之join
    mysql数据库(10)--变量、存储过程和函数
    mysql数据库(9)--视图
    mysql数据库(10)--limit与offset的用法
    前端常用在线引用地址
    SQL中ON和WHERE的区别
    jstl和e1
    解决中文乱码问题
    JSP
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/9249057.html
Copyright © 2020-2023  润新知