u8 *desc_buf并初始化后,怎么得到buffer长度
时间: 2024-04-06 08:34:35 浏览: 44
要得到初始化后的`desc_buf`的长度,可以使用`strlen`函数。但是,需要注意的是,如果`desc_buf`中包含有二进制数据或者`\0`字符,那么`strlen`函数可能会得到错误的结果。在这种情况下,可以使用`sizeof`运算符来得到`desc_buf`的长度,例如`sizeof(desc_buf)`。
相关问题
u8 *desc_buf,然后sizeof(desc_buf)和sizeof(*desc_buf)有什么区别
在C语言中,`u8 *desc_buf`定义了一个指向`u8`类型的指针变量`desc_buf`。`sizeof(desc_buf)`返回的是指针变量`desc_buf`本身所占用的内存大小,即在32位系统中为4字节,在64位系统中为8字节。
而`sizeof(*desc_buf)`则是对指针所指向的数据类型`u8`进行求大小运算。`*desc_buf`是指针`desc_buf`所指向的数据类型,即`u8`类型的变量,所以`sizeof(*desc_buf)`返回的是`u8`类型变量所占用的内存大小,通常为1个字节。
因此,`sizeof(desc_buf)`和`sizeof(*desc_buf)`是完全不同的两个运算,前者返回的是指针本身所占用的内存大小,后者返回的是指针所指向的数据类型的大小。
``` char* p_buf ```void **p_out_buf char* p_buf 如何让p_out_buf == p_buf
在C/C++中,`char *p_buf` 和 `void **p_out_buf` 是两个不同类型的指针。`p_buf` 是一个指向 `char` 字符的单级指针,而 `p_out_buf` 是一个指向 `void *` 的双级指针,也就是指向任意类型数据的指针的指针。
如果你想将 `p_out_buf` 指向与 `p_buf` 相同的内容,你需要确保 `p_out_buf` 实际上指向的是与 `p_buf` 所指向相同的内存区域,且该区域包含 `char` 类型的数据。以下是如何做到这一点:
1. 如果 `p_buf` 已经指向了一个有效的 `char` 数组,你可以这样设置 `p_out_buf`:
```c++
*p_out_buf = (void*) p_buf;
```
这里,`*(void**)` 将 `p_out_buf` 解引用为一个 `void *`,然后将其赋值给 `p_buf` 的实际地址。
2. 然而,如果你不确定 `p_buf` 是否指向 `char` 类型的内存,或者 `p_out_buf` 只能指向 `void *`,那么这种直接的转换可能是不安全的。在这种情况下,你需要保证 `p_buf` 指向的是一个可以隐式转换为 `void *` 的地址。
如果 `p_buf` 不是已经初始化并指向正确类型的内存,则直接比较 `*p_out_buf == p_buf` 或者 `**p_out_buf == *p_buf` 通常是无效的,因为它们不会按预期比较底层的字节内容。
总之,在实际操作前,请务必检查指针的类型和内容是否符合预期,以避免潜在的类型错误或未定义行为。
阅读全文