[問題] 讀id3v1 tag用fread和fgetc的差異?
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...)
dev c++
問題(Question):
顯示多餘的字元
餵入的資料(Input):
.mp3
預期的正確結果(Expected Output):
TAG
錯誤結果(Wrong Output):
TAGB ?
程式碼(Code): (請善用置底文標色功能)
#include <stdio.h>
#include <stdlib.h>
#define MP3_TAG_SIZE 128
#define TAG_SIZE 3
#define TITLE_SIZE 30
#define ARTIST_SIZE 30
#define ALBUM_SIZE 30
#define YEAR_SIZE 4
#define COMMENT_SIZE 28
#define ZERO_BYTE 1
#define TRACK_SIZE 1
#define GENRE_SIZE 1
typedef struct {
char tag[TAG_SIZE];
char title[TITLE_SIZE];
char artist[ARTIST_SIZE];
char album[ALBUM_SIZE];
char year[YEAR_SIZE];
char comment[COMMENT_SIZE];
char zero;
char track;
char genre;
} MP3_TAG;
int main(int argc, char *argv[])
{
int i = 0;
MP3_TAG mp3_tag;
char *file_path;
FILE *fin;
file_path = "c:/Bounce.mp3";
fin = fopen(file_path,"rb");
if(fin == NULL)
{
printf("file doesn't exist!!\n");
}
fseek(fin,-MP3_TAG_SIZE,SEEK_END);
fread(&mp3_tag.tag,1,sizeof(TAG_SIZE),fin);
printf("MP3_TAG= %s\n", mp3_tag.tag);
system("PAUSE");
return 0;
}
以上code會印出 TAGB ?
但 fread 那行如果換成
while(i<TAG_SIZE)
{
mp3_tag.tag[i] = fgetc(fin);
i++;
}
則會正確顯示TAG
fread不是一次讀一個byte?
有試過用ftell印出fin的位址是正確的,但讀出來就是有多餘的字元? 何解@@
想很久無法解決印出多餘字元的問題..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.190.217
→
12/19 22:25, , 1F
12/19 22:25, 1F
→
12/20 20:27, , 2F
12/20 20:27, 2F
→
12/20 20:27, , 3F
12/20 20:27, 3F
→
12/20 20:28, , 4F
12/20 20:28, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):