我正在尝试调试一个程序。有一个函数被称为 prv_write()
static uint8_t prv_write(uint16_t instanceId,
int numData,
lwm2m_data_t * dataArray,
lwm2m_object_t * objectP)
这个函数被传递(第三个参数)一个指向结构 lwm2m_data_t
的指针,它被定义为:
typedef struct _lwm2m_data_t lwm2m_data_t;
struct _lwm2m_data_t
{
lwm2m_data_type_t type;
uint16_t id;
union
{
bool asBoolean;
int64_t asInteger;
double asFloat;
struct
{
size_t length;
uint8_t * buffer;
} asBuffer;
struct
{
size_t count;
lwm2m_data_t * array;
} asChildren;
struct
{
uint16_t objectId;
uint16_t objectInstanceId;
} asObjLink;
} value;
};
有人可以解释一下我如何在函数 prv_write()
中打印 length
和 buffer
的值吗?在这个阶段我真的不明白结构内部的结构。
理想情况下,我想打印所有结构成员的值,以便我可以完全调试系统。
最佳答案
好吧,打印它你可以简单地做:
for (int i=0; i<dataArray->value.asbuffer.length; ++i)
printf("%d ", dataArray->value.asBuffer.buffer[i]);
printf("\n");
如果您需要在代码的多个位置执行此操作,您可以为此创建一个宏:
#define SHOW_LWM2M_DATA(DA) do { \
for (int i=0; i< (DA)->value.asbuffer.length; ++i) \
printf("%d", (DA)->value.asBuffer.buffer[i]); \
printf("\n"); } while (0)
(do { } while(0)
只是为了让宏表现得像一个普通函数)
随着代码的发展,在代码的许多地方使用该宏:
pipSHOW_LWM2M_DATA(dataArray);
但是如果你想反省那部分代码,我建议你使用gdb
(或lldb
),并设置一个观察点或断点使用它的 print
函数用于查找值,它将轻松打印结构和数组。
关于c - 如何在 c 中打印结构成员的值(使用指向结构的指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231537/