看板 C_and_CPP 關於我們 聯絡資訊
各位前輩好 小弟有一個C的讀檔問題想請教 我有一個test.txt檔 裡面假設有打一個名字 (例如:王小明) 我的目的是想在陣列中存下這三個中文字 以方便後續計算 但是 卻一直跑步出中文字 希望各位前輩能給予小弟一點建議或是有沒有更好的作法呢?謝謝~ 程式碼如下: #include <stdio.h> int main(int argc, char* argv[]){ char WordFrequency[6]; //設 char Word[2]; //chinese word is 2 bytes int i; FILE *in = fopen("test.txt", "r"); FILE *out = fopen("output.txt", "w"); while( fgets( Word, sizeof(Word), in ) ){ for( i = 0; i <= 5; i = i + 2 ){ WordFrequency[i] = Word[0]; WordFrequency[i+1] = Word[1]; } } fputs(Wordfrequency,out); fclose(in); fclose(out); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.71.70.253
johnpage:你知道wordfreqece =word的意思嗎? 11/26 17:53
snoopy0907:不是因為中文字佔2b 所以有分前半和後半部分? 11/26 17:55
littleshan:好奇怪啊 為什麼中文字是2byte呢 11/26 18:22
snoopy0907:我知道6為啥不可..是下面的for迴圈的終止條件設錯@@ 11/26 18:25
snoopy0907:但是用fprintf針對每個元素印出來還是怪怪的.. 11/26 18:26
※ 編輯: snoopy0907 來自: 219.71.70.253 (11/26 18:44)
purincess:你知道字串的結尾是什麼嗎 11/26 20:23
okgogogo:你知道你的while跟for共跑幾次嗎?...還要補'\0' 11/26 21:15
linotwo:http://codepad.org/28UJQQsj 11/26 21:51
linotwo:問題在於 fgets 發現你給的空間只有 2 bytes 11/26 21:52
linotwo:而最後一個 byte 比須做為 null terminator 11/26 21:52
linotwo:所以它會只讀 1 byte 並在後面補 '\0' 11/26 21:53
johnpage:程式做的不是題目要的 11/26 23:21
snoopy0907:謝謝,後來自己try過幾次就知道一個字要3個byte 11/27 08:08
LPH66:3 個 byte...竟然是 UTF-8 orz 11/27 09:51
descent:snoopy0907: 你的假設不會每次都正確,utf8 是不定長度編碼 11/27 16:23
descent:中文有可能 3-4 byte, 這不是容易處理的問題, 請找尋 11/27 16:24
descent:library 來處理這問題。 11/27 16:24
descent:若你可以使用 c++11, 可以使用 ofstream/wifstream 來處理 11/27 16:25