我是否不正确地集中了这些字符数组?
Am I concentrating these character arrays incorrectly?
我一直在尝试用 c++ 从头开始创建一个 midi 文件。我将不同的块(和块的一部分(分成不同的字符数组。
我的代码:
#include <iostream>
#include <fstream>
#include <cstring>
int main(int, char* []) {
std::ofstream MIDIfile ("example.mid")
char header[] = { /* hex data */ };
char track_header[] = { /* hex data */ };
char track_data[] = { /* hex data */ };
MIDIfile << strcat(header, strcat(track_header, track_data));
MIDIfile.close();
return 0;
}
我唯一的问题是,当写入文件时,81 个字节中只有 8 个被写入。这有什么原因吗?我做错了什么吗?
问候,影子跟踪者75
你必须了解strcat()
做什么。这条线永远不会起作用。实际上,更好的是,永远不要使用strcat()
.这是废话。
MIDIfile << strcat(header, strcat(track_header, track_data));
你有十六进制数据的二进制缓冲区,只需使用write()
函数:
MIDIfile.write(header, sizeof(header));
...
并一次写入一个缓冲区。
char
数组或指针的格式化operator<<
函数用于打印以 null 结尾的字符串。如果您的"十六进制数据"包含任何零(二进制零,0
,而不是字符'0'
(,那么它将充当终止符。
更不用说您拥有的缓冲区溢出了,因为您附加到一个固定大小的数组中,该数组专门针对您初始化它的数据调整大小。
解决方案首先不是使用任意二进制数据作为字符串(strcat
函数还希望数据是以 null 结尾的字符串(,而是作为原始数据。其次,您需要使用write
函数写入任意数据。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?