2012-09-26 31 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]);