2013-11-25 95 views
1

我試圖將代碼從32b移植到64位,並且我被困在這一個錯誤中。移植32位到64位printf相關錯誤

 printf ("STUFF 0x%x ",(u_int32_t)val) 

在移植我得到一個錯誤說%×預計unsigned int類型和參數2的參數的類型是「長unsigned int類型」。因此,採取這種錯誤顧及我做出%x到%LX

變化
 printf ("STUFF 0x%lx ",(u_int32_t)val) 

格式%×期望類型的參數長unsigned int類型和參數2爲unsigned int型的。這真是令人困惑。

現在我做這樣的事情,它的工作原理。

 printf ("STUFF 0x%x ",(u_int32_t)(size_t)val) 

我不知道爲什麼這也解決了這個問題。現在確定什麼是解決這個錯誤的正確方法。

在此處添加一個問題。

所以你有一個結構st;

st *a = NULL; 
    u_int32_t = B 

    a = (st *)B; 

我在這裏得到一個錯誤,說「從不同大小的整數轉換爲指針」。我通過做類似

a = (st *)(size_t)B; 

這是正確的做法嗎?

+2

什麼類型是'val' *真* *? –

+0

它實際上的結構對象.. STRUCT一個{} 空隙MYFUNC(A * VAL){ 的printf( 「0X STUFF%LX」,(u_int32_t)VAL) } //像這樣 – Rags

回答

4

如果您想打印一個指針然後使用"%p"格式說明:

printf("STUFF %p\n", val); 

見例如this reference

+2

可替代地,他可以將其轉換爲'uintptr_t'並使用'PRIxPTR'說明符將其打印爲整數。 –