我正在从事视觉C ++。我是C ++的初学者,但我处于一种奇怪的情况下,我的“ Contents”变量类型为-

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标记。

09-06 23:19