缓冲区的动态内存分配
dynamic memory allocation to buffer
我正在开发visual c++。我是c++的初学者,我处于一个奇怪的情况,我有类型的"内容"变量
char FileContents[200000] ;
现在我已经用sizeof操作符取了一个文件的大小,比如这个
int SizeOfFile =Sizeof(File);
现在我必须将这个文件的数据复制到数组索引为200000的"Contents"中
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[20000]的内存分配;因为"SizeOfFile"的值很小,在它的大小之后,我有奇怪的"宋体",我不想看到它们我想要的是只包含"FileContents"内容而不包含其他内容的文件。并且i不能动态分配文件内容的内存。因为它必须等于我们使用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
数组解释为字符串时,这些字符串被视为以null结尾的字符串,这意味着字符串的末尾由找到的第一个0
标记。
您需要用' '
字符填充所有数据。
所以使用这个:
char FileContents[200000] = {};
这样做对我很有效-
char FileContents[200000] ={0};
然后和以前一样做。
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 在函数中分配内存时出现问题
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- constexpr new 如何分配内存?
- 在构造函数中分配内存失败是如何冒泡的
- LLVM 传递以在特定地址分配内存
- CudaMalloc 在分配内存时失败
- 为什么它在不分配内存的情况下工作正常
- 为什么在正确解除分配内存时出现内存泄漏?
- 如何通过 malloc 为队列数组分配内存?
- vector是否为std::移动的对象连续分配内存
- 删除类成员的动态分配内存的最佳方法是什么
- 唯一指针是否在堆或堆栈上分配内存?
- 如果不分配内存,我如何能够为变量创建和分配值?
- std::initializer_list 堆是否分配内存?
- 如何按顺序或在指定的地址分配内存?
- 是否可以使用 malloc 为类对象分配内存?
- 迭代器是否分配内存(如指针)?