[問題] C語言fread後面跑出亂碼

看板C_and_CPP作者 (Pix)時間14年前 (2011/06/13 23:13), 編輯推噓8(8025)
留言33則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include <stdio.h> #include <string.h> #include <stdlib.h> 問題(Question): 印出的資料在10以前是正常 10以後就變成亂碼 預期的正確結果(Expected Output): 編號 地區 夜市名稱 營業地點 營業時間 1 基隆 基隆廟口夜市 仁愛區仁三路和愛四路一帶 全年無休 2 台北 士林夜市 捷運劍潭站至士林站之間 全年無休 . . . . . . . . . . . . . . . 10 新竹 後站夜市 新竹市南大路139巷 二、四 11 新竹 清大夜市 新竹市建功路 全年無休 12 苗栗 文化夜市 嘉義市中心 五 錯誤結果(Wrong Output): 編號 地區 夜市名稱 營業地點 營業時間 1 基隆 基隆廟口夜市 仁愛區仁三路和愛四路一帶 全年無休 2 台北 士林夜市 捷運劍潭站至士林站之間 全年無休 . . . . . . . . . . . . . . . 10 新竹 後站夜市 新竹市南大路139巷 二、四 -1224736768s竹 M大夜市 s竹市建功路 悧~無休 -1392508928]栗 憭 J市 顫q市中心 ? 程式碼(Code):(請善用置底文網頁, 記得排版) https://gist.github.com/1022970 (這樣OK嗎? 不好意思...我是第一次用這一類網址) 補充說明(Supplement): 是先讀入資料再印出來 不知道為什麼編號10之前都好好的 11後就變成了亂碼 輸入進去的資料沒有問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.141.170.180

06/13 23:16, , 1F
沒貼程式真的只能隔空抓藥...這現象大概只能猜陣列超出範圍
06/13 23:16, 1F

06/13 23:17, , 2F
很長我不知道怎麼貼ˊˋ
06/13 23:17, 2F

06/13 23:18, , 3F
都說了請善用置底文網頁 Orz
06/13 23:18, 3F

06/13 23:19, , 4F
"請善用置底網址"
06/13 23:19, 4F
※ 編輯: Pix911 來自: 220.141.170.180 (06/13 23:21)

06/13 23:44, , 5F
程式看起來似乎沒有問題 也許要看到資料檔案才能說是啥問題
06/13 23:44, 5F

06/13 23:45, , 6F
說似乎是因為我好像發現了某個細節 但要看到資料檔才能確認
06/13 23:45, 6F

06/13 23:46, , 7F
新 0xB773 s 0x73 -1224736768 B7000000
06/13 23:46, 7F

06/13 23:48, , 8F
說不定問題在第十行的資料結尾…
06/13 23:48, 8F

06/13 23:48, , 9F
嗯 樓上發現的這一點我有考慮進去 所以才說某個細節可能有關
06/13 23:48, 9F

06/13 23:49, , 10F
所以我才說要看到資料檔才能確認...
06/13 23:49, 10F

06/14 00:00, , 11F
fopen mode用binary mode呢? 應該是有換行字被吃掉了..
06/14 00:00, 11F

06/14 01:24, , 12F
應該是國字"四"的ascii碼的問題 請找"許蓋功"問題
06/14 01:24, 12F

06/14 03:21, , 13F
看到中文字 第一個想到的也是許功蓋
06/14 03:21, 13F

06/14 08:23, , 14F
許功蓋飯問題囉XD
06/14 08:23, 14F

06/14 09:56, , 15F
改成寬字元吧
06/14 09:56, 15F

06/14 09:58, , 16F
fread/fwrite 應該和許功蓋問題無關吧...
06/14 09:58, 16F

06/14 10:09, , 17F
ft = fopen( "nightmarket.dat", "r+" );r+改成rb+
06/14 10:09, 17F

06/14 10:12, , 18F
65行的main改成continue
06/14 10:12, 18F

06/14 10:14, , 19F
85行的r改成rb
06/14 10:14, 19F

06/14 10:24, , 20F
65行不用改,我誤解他在while範圍內了
06/14 10:24, 20F

06/14 10:27, , 21F
fread判斷結尾是用等於0來判斷,你用feof不一定抓到
06/14 10:27, 21F

06/14 10:27, , 22F
檔案結尾,甚至有可能會少讀or多讀一行
06/14 10:27, 22F

06/14 10:30, , 23F
還有每次讀完檔,最好用memset輕空struct內容
06/14 10:30, 23F

06/14 10:30, , 24F
~"~這是我能想到錯誤的點
06/14 10:30, 24F
感謝a大<(_ _)> 沒有亂碼了 我把r改成rb 還有學長建議新增完重開檔案 終於OK了 還有....L大很抱歉 我弄了好久還是沒辦法上傳資料檔ˊˋ 最後...謝謝各位前輩的幫忙^^ ※ 編輯: Pix911 來自: 111.252.11.99 (06/14 14:18)

06/14 14:36, , 25F
char改成unsigned char
06/14 14:36, 25F

06/14 16:00, , 26F
哪個char?
06/14 16:00, 26F

06/14 16:29, , 27F
struct 裡面的char
06/14 16:29, 27F

06/14 16:34, , 28F
哦哦~那跟原本會有甚麼差別嗎?
06/14 16:34, 28F

06/14 16:35, , 29F
恩,我其實也不太懂這之間的細節,但是我看網上,printf
06/14 16:35, 29F

06/14 16:35, , 30F
中文時,大家都用unsigned char.這可能要請有經驗的回答
06/14 16:35, 30F

06/14 16:53, , 31F
對中文用 char 似乎就挺怪異的...
06/14 16:53, 31F

06/14 22:03, , 32F
其實我是想建議wchar_t拉,只是我最近才知道這東西
06/14 22:03, 32F

06/14 22:04, , 33F
所以就沒建議了
06/14 22:04, 33F
文章代碼(AID): #1DzYa65o (C_and_CPP)