gpt4 book ai didi

c++ - char数组赋值和管理

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:47 26 4
gpt4 key购买 nike

我应该用 C++ 编写一个库来处理与 kad 网络的连接。我正在尝试根据 aMule&co 使用的数据包构建数据包。

而且我真的无法理解这段代码之间的区别:

buffer = "\xe4\x20\x02";

例如,这段代码:

char p_buffer[36];
p_buffer[0] = 0xe4;
p_buffer[1] = 0x20;
p_buffer[2] = 0x02;

buffer = p_buffer;

(buffer是类的私有(private)属性,而p_buffer是局部变量)

用 wireshark 捕获数据包给了我不同的结果(第一个是我想要的,第二个不是),就像我在小端/大端符号上做错了什么,我猜......

为什么在类的构造函数中我不能像这样修改 [private]“char* buffer”:

buffer[0] = 0xe4;

? (它不起作用,没有任何回溯错误就退出了)

(如果重要的话,我正在使用 crypto++ 和 boost 库)

在此先感谢您的帮助_

最佳答案

您的第一个代码示例大致相当于:

static const char buffer_internal[4] = { 0xe4, 0x20, 0x02, 0x00 };
buffer = buffer_internal;

这里的两个区别是:

  • 缓冲区以 null 结尾
  • 缓冲区不可修改。尝试修改它可能会崩溃。

您的第二个示例分配了一个 36 字节的可修改缓冲区。然而,当缓冲区超出范围时,它也会被丢弃 - 在这里要非常小心,它在被释放后不会被使用。

至于第三个样本,你是否初始化了'buffer',如果它是一个指针?您没有提供足够的信息来真正诊断您的错误 - 完整的类声明和构造函数会有所帮助。

关于c++ - char数组赋值和管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com