我想读取mp3文件将其复制到内容[19000]。然后,我想将内容[19000]发送到套接字。
但是,在strcat(内容,tmp)中,会发生分段错误。
但是,如果我阅读HTML文件,这段代码运行没有任何问题。
如何阅读.mp3文件并将其内容复制到内容[19000] ??
mp3文件的大小是8MB。
FILE *fp;
if ( (fp = fopen("./test.mp3", "rb")) == NULL) {
fputs("Cannot open input file...\n", stderr);
exit(1);
}
char tmp[1024]="";
char contents[19000]="";
while (!feof(fp)) {
fread( tmp, 1, 1023, fp);
strcat(contents, tmp);
}
FILE *fp;
if ( (fp = fopen("./test.mp3", "rb")) == NULL) {
fputs("Cannot open input file...\n", stderr);
exit(1);
}
char tmp[1024]="";
char contents[19000]="";
while (!feof(fp)) {
fread( tmp, 1, 1023, fp);
strcat(contents, tmp);
}
答案 0 :(得分:1)
strcat()用于连接字符串。 MP3:s是二进制文件(你甚至打开它们作为' rb')。 来自男人:
strcat()函数将src字符串追加到dest字符串, 在dest的末尾覆盖空字节(' \ 0'),然后 添加一个终止空字节。琴弦可能不重叠, 并且dest字符串必须有足够的空间用于结果。
strcat()不知道" tmp"的大小。如果tmp中没有空字节(0x00),它将继续读取,直到它崩溃(在堆栈上读取之后)。
使用memcpy()。
答案 1 :(得分:0)
您不应该使用strcat()
,因为它期望C样式字符串应该以空字符终止。您应该使用memcpy()
或memmove()
并自行计算偏移量。