我是否不正确地集中了这些字符数组?

Am I concentrating these character arrays incorrectly?

本文关键字:字符 数组 是否 不正确 正确地 集中      更新时间:2023-10-16

我一直在尝试用 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函数写入任意数据。