我正在研究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”。
为了摆脱这些“ÌÌ”的价值,该怎么办呢?任何解决方案?
答案 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};
并像之前一样做完之后。