2013-06-06 44 views
1

我的問題是:如何打印「pMessage」,「aiLength」,「szDataSize」?如何打印「apr_uint32_t」?

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; 

什麼是「apr_uint32_t」?

+0

您正在使用哪個庫? –

回答

2

雖然我覺得@段落符號的答案 - 用C99格式字符串轉換說明在<inttypes.h> - 可能是最優雅的,該unsigned long類型是保證至少 32位,所以你可以簡單地使用%lu符用演員表:

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

哪個不需要C99。今天這不是什麼大問題,但是IIRC,APR並不承擔C99編譯器,或者他們不會打擾他們自己的「確切」類型。

+0

我試過了。結果與Navnath相同。但我認爲你的方式更好。非常感謝你。 –

+0

它取決於'typedef'是什麼數據類型,如果庫說是'typedef'給定的數據類型,那麼爲什麼要假設,並且'unsigned int'等於'unsigned long'? 'apr_uint32_t'和'apr_ino_t' –

+0

+1之間有什麼區別和聰明。此外,[C99當然不是無處不在](http://stackoverflow.com/questions/16908899)。 – pilcrow

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 int它是通過typedef阿帕奇

Reference
+0

您鏈接的相同參考警告:*「此頁面上的宏和typedef的實際值是特定於平臺的,不應該依賴於!」* – pilcrow

+0

如果總是可以安全地打印縮放數據,您應該能夠安全printf(「 lld「,(long long)aprVal); –

+0

非常感謝Navnath。我努力了。他的回答是對的。 –

0

apr_uint32_t是unsigned int類型,所以你應該知道下一步該怎麼做。

+1

不,typedef是平臺特定的,並且顯式*不*保證是一個無符號整數。 – pilcrow

+0

是的,但它應該非常接近uint32_t,如果你成爲C99哪個apr沒有,那麼就定義他們自己的......如果你在任何系統當前的使用情況下,除了嵌入式和研究平臺之外,你將有一個32位int。 –