动态内存分配到缓冲区

时间:2013-08-14 11:12:56

标签: c++ null buffer dynamic-memory-allocation

我正在研究visual c ++。我是c ++的初学者,我处于一种奇怪的情况,我有“内容”变量的类型 -

char FileContents[200000] ;

现在我使用像这样的sizeof运算符来获取文件的大小

int SizeOfFile =Sizeof(File);

现在我必须将此文件的数据复制到“内容”中,其数据索引为200000.假设我这样做了

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 [200000]的内存分配;因为“SizeOfFile”是非常小的价值,在它的大小之后我有奇怪的“ÌÌ”,我不想看到它们。 我想要的是仅包含“FileContents”内容的文件。并且我无法正确地分配 FileContents的内存。因为它必须等于我们使用Sizeof(File)动态获取的“SizeOfFile”。

为了摆脱这些“ÌÌ”的价值,该怎么办呢?任何解决方案?

3 个答案:

答案 0 :(得分:1)

您需要使用零初始化数组,因为它的初始内容未确定且可以包含任何值:

// 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数组解释为字符串时,这些被视为空终止字符串,这意味着字符串的末尾由找到的第一个0标记。

答案 1 :(得分:1)

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

所以使用这个:

char FileContents[200000] = {};

答案 2 :(得分:0)

这样做对我有用 -

char FileContents[200000] ={0};

并像之前一样做完之后。

相关问题