c - 如何在 c 中打印结构成员的值(使用指向结构的指针)

标签 c pointers struct

我正在尝试调试一个程序。有一个函数被称为 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() 中打印 lengthbuffer 的值吗?在这个阶段我真的不明白结构内部的结构。

理想情况下,我想打印所有结构成员的值,以便我可以完全调试系统。

最佳答案

好吧,打印它你可以简单地做:

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/

相关文章:

c - 在C中动态分配指定大小的数组

c - 如何获取 const char 指针的大小

c - 仅使用数组的链表实现

swift - 如何在 Swift 3 中将 UnsafePointer<[Float]> 或 Float Array 数据转换为 Unsafe[Mutable]Pointer<Float>?

struct - 结构间共享的方法

c++ - 级联结构指针测试代码中的段错误

C - "Connection refused"在一个已经打开的套接字上

无法访问单独文件夹中的头文件

c - 如何打印一个函数的地址?

c - 声明指向从结构定义中接受结构的函数的指针?