2012-09-26 59 views
1

如果我有一個地址字符串,它是C++打印字符使用指針地址

(DWORD*)PEFile->ExportTable.pNames[i]; 

我如何可以打印字符串,請注意,我不知道該字符串的大小

+0

這實際上是一個指向'DWORD'。 'PEFile-> ExportTable.pNames'的類型是什麼? –

回答

1

如果字符串爲null-terminated,你可以簡單地使用:

std::cout << PEFile->ExportTable.pNames[i] << std::endl; 

(使用std::wcout如果UNICODE定義和pNames[i]LPCWSTR。)

如果既沒有空終止符也沒有字符串長度,那麼你就搞砸了!

2

這是一個有點難以解釋,因爲它的曖昧,但是......

如果.pNames本身就是一個空終止字符數組(C-字符串)或C++字符串,只是做:

std::cout << (DWORD*)PEFile->ExportTable.pNames; 

如果.pNames [i]是一個空終止字符數組(C字符串),只是做:

std::cout << (DWORD*)PEFile->ExportTable.pNames[i]; 

如果它是一個非空terimnated字符數組,你不知道大小, 你有麻煩了。

如果你有字符數組的大小,但它不是以null結尾,你可以迭代它並打印。 std::copy(PEFile->ExportTable.pNames[i], PEFile->ExportTable.pNames[i] + length, std::ostream_iterator<char>(std::cout, ""));會在一行中爲你做到這一點。

+1

請注意,轉換爲DWORD *可能需要打印字符串的地址,而不是其內容。 –

0

如果你是認真的爲C,而不是C++:

printf("%s", PEFile->ExportTable.pNames[i]);