缓冲区的动态内存分配

dynamic memory allocation to buffer

本文关键字:分配 内存 动态 缓冲区      更新时间:2023-10-16

我正在开发visual c++。我是c++的初学者,我处于一个奇怪的情况,我有类型的"内容"变量

char FileContents[200000] ;

现在我已经用sizeof操作符取了一个文件的大小,比如这个

int SizeOfFile =Sizeof(File);

现在我必须将这个文件的数据复制到数组索引为200000的"Contents"中

memcpy(FileContents,&File[0],SizeOfFile);

我将"FileContents"的内容输出到任何位置的文件中(根据我的意愿)。我发现文件的内容显示得很好,但当文件的内容完成时,我有一些奇怪的数据,比如"宋体"。请参阅下文-

</body>
    </html> //Here finshes the file and after that i have this kind of data as you see below
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ..and so on until file ends.

我知道这是由于char FileContents[20000]的内存分配;因为"SizeOfFile"的值很小,在它的大小之后,我有奇怪的"宋体",我不想看到它们我想要的是只包含"FileContents"内容而不包含其他内容的文件。并且i不能动态分配文件内容的内存。因为它必须等于我们使用Sizeof(File)动态获得的"SizeOfFile"。

在这种情况下,为了摆脱这些"宋体"的价值观,该怎么办?有什么解决方案吗?

您需要用零初始化数组,因为它的初始内容是不确定的,并且可能包含任何值:

// initialize with 0
char FileContents[200000] = {};

您也可以在初始化后使用std::fill:将元素设置为零

// set all elements to 0 after initialization
std::fill(FileContents, FileContents + 200000, 0);              // C++03 or C++11
std::fill(std::begin(FileContents), std::end(FileContents), 0); // C++11

当将char数组解释为字符串时,这些字符串被视为以null结尾的字符串,这意味着字符串的末尾由找到的第一个0标记。

您需要用''字符填充所有数据。

所以使用这个:

char FileContents[200000] = {};

这样做对我很有效-

char FileContents[200000] ={0};

然后和以前一样做。