我如何知道指針指向的特定地址包含哪些內容?我想打印這個地址位置的內容?我應該添加什麼作爲佔位符?如何在C中未知類型時顯示參數的值?
回答
任何其他指針類型可以轉換爲一個空指針,打印其地址:
char c='A';
char *pc=&c;
printf("%p",(void *) pc);
現在,如果你想在這個地址的字符:
char c='A';
char *pc=&c;
printf("%c",*pc);
如果你的問題是 - 你怎麼能推斷存儲在void*
表示的給定位置的對象的類型,那麼你不能。如果你的問題是我怎麼能知道字節的值我void*
點,那麼它是
unsigned char valueAtAddressP = *((unsigned char*)p);
您可以通過多種方式做到這一點
int x = 5;
int *ptrX = 6;
printf("The pointer of x is: %d", &x);
printf("The ptrX is: %d", ptrX);
上述兩種方法的給你地址值。
這將只打印引號中的字符串...... – 2010-10-16 18:36:09
無法在C中檢測到您的應用程序應該將指針指向的數據視爲特定類型 - 取決於您的需求。
void treat_as_char(const void* ptr)
{
const char *p = ptr;
printf("Data: %s\n", p);
}
void treat_as_int(const void* ptr)
{
const int *p = ptr;
printf("Data (int): %d\n", p);
}
你需要一些自定義的結構,讓不同類型的特定指針:
typedef struct _Variant
{
enum {INT, CHAR, DOUBLE} type;
void *ptr;
} Variant;
另一種方式,你可以做到這一點是指你的數據作爲void*
,然後是指,作爲一個unsigned char*
,並以十六進制字節打印所有內容。我發現它在處理連續字節的時候非常有用,因爲它們的使用還不知道。
但是,此方法要求您有一種方法來知道您的數據有多長時間,因爲無法在任意類型的數據上調用sizeof
。
#include <stdio.h>
int main() {
char name[16] = "hello there";
void* voidBuffer = name;
unsigned char* buffer = voidBuffer;
int i;
for (i=0; i<16; i++) {
printf("%x ", (unsigned int)buffer[i]);
}
return 0;
}
這將輸出68 65 6c 6c 6f 20 74 68 65 72 65 0 0 0 0 0
。
看起來您正在嘗試打印出該地址中的ASCII代碼,這並不是問題所在。 – antonio081014 2010-10-16 19:06:33
@ antonio081014:至少對我而言,這並不明顯,至少對於什麼問題 – 2010-10-16 19:26:01
+1當對象的類型未知時,最好的辦法是將值作爲十六進制轉儲打印出來。但是你必須小心不要訪問可能超出限制的地址。 – Ziffusion 2010-10-16 19:32:07
- 1. 如何在Scala中實現未知類型和未知數的參數
- 2. 當在Haskell中進行跟蹤時,如何顯示一個在編譯時其數據類型未知的值?
- 3. 如何在未知的數量和類型參數
- 4. 如何知道C中未知類型變量的數據類型?
- 5. 如何在c中表示time_t類型的未初始化值
- 6. C#未知類型
- 7. 類型顯示爲參數值與Url.Action
- 8. 如何在C#中創建未知/泛型類型的列表?
- 9. Kotlin的反思:未知類型參數
- 10. 未知類型的方法參數
- 11. 傳遞未知類型的參數
- 12. 如何編寫接受未知類型和參數個數的C++函數?
- 13. 未知類型的C++
- 14. 基本C++類型何時具有未知初始值?
- 15. PHPExcel獲取未知類型的顯示值
- 16. 在Go中傳遞未知參數類型的函數引用
- 17. C#在運行時創建參數類型未知的方法代理
- 18. 創建未知類型的數組。 C#
- 19. 如何顯示未知數的RelativeLayouts?
- 20. 調用函數只在C運行時知道參數類型?
- 21. 如何在Android Studio中顯示參數類型標籤?
- 22. 如何在MessageBox()中顯示數值?C++
- 23. C++未知類型錯誤
- 24. C#未知類型屬性
- 25. 未知類型名稱C
- 26. 如何限制泛型類型參數只接受C#中的空值類型?
- 27. C++中未知類型的宏
- 28. C++中的未知類型錯誤
- 29. C++中的OpenCV:「未知類型名稱」
- 30. 類型設計未知數類型參數
應將'unsigned char'移植到具有補碼或符號/幅度和帶符號的plain-'char'類型的病態系統。 (在這些系統上,0x00/0xFF或0x00/0x80之間的區別將通過使用普通的'char'來摺疊)。 – 2010-10-16 18:43:58
@R ..編輯。其實我不確定C中是否有無符號字符:) – 2010-10-16 18:46:13