2

我想定义一个任何大小的缓冲区,它会在内存中分配一些空间。我想读取分配给该缓冲区的内存中的现有数据。

我尝试过以下代码,但我每次都只看到一些特殊字符。

如果我通过 DumpIt 工具转储我的内存,然后通过 HEX 编辑器打开它,我可以看到普通字符(如数字和 abc 等)。

我使用了下面的代码,它使用了这里首先提到的两种技术,第二种只使用简单的数组并一个一个地遍历每个字符。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <process.h>
#include <time.h>
#include <cstdlib>
#include <stdint.h> 

int main()
{
    int x = 4;
    char arr[400];
    char * src;
    src = arr;

    uint8_t *memory = (uint8_t *) malloc(1000);  
    while(*memory != NULL) {
        printf("Character %c\n", *(memory++));
        memory++;
    }

    while(src != NULL) {
        printf("%c ", *src);
        x++;
        if(x == 1000)
            break;
    }
    printf("And the data stored in memory is %s\n", arr);

    system("PAUSE");
    return 0;
}
4

2 回答 2

3

当你运行 malloc 时,你只会在那个内存段中得到随机的东西。其中一些将无法被编码为任何用 ASCII 可读的东西。您可以尝试使用“%X”而不是“%c”打印内存中的十六进制值。

虽然我不知道你为什么想做这样的事情。

于 2012-10-02T20:31:56.653 回答
1

你没有告诉我们你在什么类型的系统上运行你的代码(conion.h让我担心最坏的情况),但在任何体面的系统上,你永远不会得到这样的“随机”数据。出于安全原因,您从系统获得的所有页面都将被清除,否则任何进程都可以读取其他进程留下的任何内容、密码、情书……

您最终可能会看到您自己的进程在初始化、调用另一个函数时遗留在堆或堆栈上的伪随机内容。但这就是您可以期望的所有“随机性”。

挑剔:

  • 不投回报malloc
  • 你的线

-

printf("And the data stored in memory is %s\n", arr);

没有多大意义。此打印语句在遇到第一个空字符时停止打印。

于 2012-10-02T20:57:44.283 回答