看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LPH66:用 %s 只能印 zero-terminated 的字串 12/19 22:25
deh3215:的確是這個問題..改成char tag[TAG_SIZE]就正常了,書上有 12/20 20:27
deh3215:寫到..thxs 12/20 20:27
deh3215: char *tag[TAG_SIZE] 12/20 20:28