1

My question is: How to printf the "pMessage","aiLength","szDataSize"?

EventInfo* pEventInfo

typedef struct {
        char* pMessage;
        SocketHeader* pSocketHeader;
        PipeHeader* pPipeHeader;
} EventInfo;

typedef struct {
        apr_uint32_t aiLength;
} PipeHeader;

typedef struct {
        apr_uint32_t szDataSize;
} SocketHeader;

What is the "apr_uint32_t"?

4

5 回答 5

2

apr_uint32_t是来自Apache Portable Runtime项目的可移植 32 位无符号整数。

您应该以与 printf 一个您确定是 32 位宽的本机无符号整数相同的方式对其进行格式化: 使用此答案中推荐的 PRIu32 格式说明符

(附带说明一下,其他 apr 可移植类型带有自己的特定于平台的 printf 说明符,例如,apr_uint64_t具有相应的 APR_UINT64_T_FMT。但是,这种类型没有。)

于 2013-06-06T05:19:19.783 回答
2

虽然我认为@pilcrow 的答案 - 使用 C99 格式字符串转换说明符<inttypes.h>- 可能是最优雅的,但unsigned long类型保证至少为32 位,因此您可以简单地使用%lu带有强制转换的说明符:

printf("%lu\n", (unsigned long) value);

不需要C99。今天这不是什么大问题,但是 IIRC、APR 也不假定 C99 编译器,否则他们不会费心滚动自己的“确切”类型。

于 2013-06-06T05:32:36.230 回答
0

apr_uint32_t 是无符号整数,所以你应该知道下一步该做什么。

于 2013-06-06T05:19:33.150 回答
0

实际上 apr_uint32_t 是一个typedefunsigned int

http://www.cplusplus.com/reference/cstdio/printf/用于 printf() 的格式说明符。

请参阅此代码http://svn.haxx.se/dev/archive-2004-04/att-0788/intl.c

另一个示例http://src.gnu-darwin.org/ports/sysutils/ftwin/work/ftwin-0.8.0/src/checksum.c.html

于 2013-06-06T05:04:36.237 回答
0

尝试这个

EventInfo eventInfo;
SockHeadExample sHead;
PipeHeader pipeHeader
printf("%s", eventInfo.pMessage);  // <- pMessage
printf("%u", sHead.szDataSize);    // <- szDataSize
printf("%u", pipeHeader.aiLength); // <- aiLength

在职的

apr_uint32_tunsigned inttypedefApache 库提供的吗

参考

于 2013-06-06T05:05:19.457 回答