繁体   English   中英

动态内存分配到缓冲区

[英]dynamic memory allocation to buffer

我正在研究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”。

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

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

// 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字符标记。

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

所以使用这个:

char FileContents[200000] = {};

这样做对我有用 -

char FileContents[200000] ={0};

和之前做的一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM