u8 *desc_buf,然后sizeof(desc_buf)和sizeof(*desc_buf)有什么区别
时间: 2024-04-06 22:34:32 浏览: 140
在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)`是完全不同的两个运算,前者返回的是指针本身所占用的内存大小,后者返回的是指针所指向的数据类型的大小。
相关问题
u8 *desc_buf并初始化后,怎么得到buffer长度
要得到初始化后的`desc_buf`的长度,可以使用`strlen`函数。但是,需要注意的是,如果`desc_buf`中包含有二进制数据或者`\0`字符,那么`strlen`函数可能会得到错误的结果。在这种情况下,可以使用`sizeof`运算符来得到`desc_buf`的长度,例如`sizeof(desc_buf)`。
``` void **p_out_buf ```void **p_out_buf怎么转成char* p_buf
`void **p_out_buf` 是一个指向指针的指针,它可能指向任意类型的内存地址。要将其转换为 `char *p_buf`,假设 `p_out_buf` 指向的是一个字节数组(即连续的 `char` 数据),并且你知道数组的确切大小,你可以这样做:
```cpp
size_t buffer_size = sizeof(char_array); // 假设你已经有了数组的大小
char *p_buf = static_cast<char*>(p_out_buf); // 将第一个元素视为指向缓冲区的地址
// 验证转换是否成功
if (p_buf && p_buf != NULL) {
// 现在 p_buf 是指向 char 类型的指针
// 你可以在这里访问缓冲区的内容
} else {
// 错误处理,例如 p_out_buf 没有指向有效的 char 数组
}
```
请注意,这里假设了 `p_out_buf` 中的第一个元素指向了正确的 `char` 数据区域,如果这不是你的情况,转换将会出错。如果不能确定这一点,应该避免这种类型转换,因为它可能导致程序崩溃或数据损坏。
阅读全文