1

我有以下代码:

if (myFile.is_open()) {
    int i = 0;
    while (myFile.good()) {
        char *ptr = &(reinterpret_cast<char*>(&mem[0]))[i];
        myFile.read(ptr, sizeof(struct req));
        cout << ptr << endl;
        i += sizeof(struct req);
    }
}

这里循环中的 cout 似乎什么也没打印,尽管我知道代码肯定是在设置内存,因为如果我做类似的事情,它会打印出正确的值cout << mem[5]。基本上,我只想打印ptr所指内容的内容。这可能是一个愚蠢的问题,但有人知道这里有什么问题吗?

4

2 回答 2

3

cout << ptr, 如果ptr是 type char*,则将其ptr视为指向 C 样式字符串(的第一个字符)的指针,并将该字符串的内容打印到但不包括终止'\0'空字符。

如果要打印指针值,请转换为void*

cout << (void*)ptr << ...

假设您实际上想要打印指针的值,它可能会显示为十六进制内存地址。你的标题是“指针的内容”,它是内存地址(指针对象本身的内容)。相反,如果您想打印指针指向的数据,请更新您的问题以更清楚地说明您要打印的内容和格式。

于 2013-02-17T00:30:57.633 回答
2

cout << ptrptr将像指向 C 字符串一样打印。因此,如果它碰到一个 NUL 字符,它将停止。例如,如果你尝试cout << "hello\0world",你只会看到hello出现。

如果您想查看其内容,请考虑编写内存区域的 hexdump。

于 2013-02-17T00:29:25.417 回答