如何在C中读取.mp3、.pdf或.jpg文件

如何在C中读取.mp3、.pdf或.jpg文件,c,segmentation-fault,C,Segmentation Fault,我想读取mp3文件并将其复制到内容[19000]。然后,我想将内容[19000]发送到套接字 但是,在strcat(contents,tmp)中,出现了分段错误 但是,如果我阅读HTML文件,这段代码运行起来没有任何问题 如何读取.mp3文件并将其内容复制到[19000]目录 mp3文件的大小为8MB FILE *fp; if ( (fp = fopen("./test.mp3", "rb")) == NULL) { fputs("Cannot open input file...\n",

我想读取mp3文件并将其复制到内容[19000]。然后,我想将内容[19000]发送到套接字

但是,在strcat(contents,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);
}

您不应该使用
strcat()
,因为它需要一个以空字符结尾的C样式字符串。您应该使用
memcpy()
memmove()
自己计算偏移量。

strcat()用于连接字符串。MP3:s是二进制文件(您甚至可以将它们作为“rb”打开)。 从那个男人那里:

函数的作用是:将src字符串附加到dest字符串, 在dest的末尾重写空字节('\0'),然后 添加一个termi-nating空字节。字符串不能重叠, 并且dest字符串必须有足够的空间来显示结果

strcat()不知道“tmp”的大小,如果tmp中没有空字节(0x00),它将继续读取,直到崩溃(在堆栈上读取后)


使用memcpy()。

它是一个二进制文件。为什么是strcat?无论如何,也要检查一个示例,使用fread
strcat进行块读取
在连接后返回指向目标字符串的
char*
指针;您没有收集到它。@suneric否,它是二进制数据,返回值与第一个参数相同。此外,fread不会设置任何NIL,因此即使对于较大的文本文件,它也会失败