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

时间:2014-09-29 07:04:08

标签: c segmentation-fault

我想读取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); }

2 个答案:

答案 0 :(得分:1)

strcat()用于连接字符串。 MP3:s是二进制文件(你甚至打开它们作为' rb')。 来自男人:

  

strcat()函数将src字符串追加到dest字符串,   在dest的末尾覆盖空字节(' \ 0'),然后   添加一个终止空字节。琴弦可能不重叠,   并且dest字符串必须有足够的空间用于结果。

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

使用memcpy()。

答案 1 :(得分:0)

您不应该使用strcat(),因为它期望C样式字符串应该以空字符终止。您应该使用memcpy()memmove()并自行计算偏移量。