0

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

在这种情况下该怎么做才能摆脱这些“ÌÌÌÌÌÌÌÌÌ”价值观?有什么解决办法吗?

4

3 回答 3

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找到的标记。

于 2013-08-14T11:16:01.770 回答
1

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

所以使用这个:

char FileContents[200000] = {};
于 2013-08-14T11:20:34.560 回答
0

doing this worked for me-

char FileContents[200000] ={0};

and do the same after it as i done before.

于 2013-08-14T11:40:12.920 回答