[問題] Linked List存字元反轉後出現亂碼

看板C_and_CPP作者 (Veck)時間14年前 (2010/06/04 12:42), 編輯推噓2(207)
留言9則, 2人參與, 最新討論串1/1
我想用Linked lisk 做檔案內容的反轉 程式碼如下: #include<stdio.h> #include<stdlib.h> struct node { char chin; struct node *next; }; typedef struct node list; typedef list *link; int main () { FILE *fptr; link head=NULL,ptr=NULL,newptr=NULL; char ch; fptr=fopen("read.txt","r"); if(fptr!=NULL) { while((ch=fgetc(fptr))!=EOF) { newptr=(link)malloc(sizeof(link)); newptr->chin=ch; newptr->next=NULL; if(head==NULL) { head=ptr=newptr; } else { ptr->next=newptr; ptr=newptr; } } fclose(fptr); ptr=head; while(ptr!=NULL) { printf("%c",ptr->chin); ptr=ptr->next; } } else {printf("Fail to open file!\n");} printf("\n"); printf("=============================================\n"); //反轉 link inverse=NULL,newhead=NULL; ptr=head; while(ptr!=NULL) //這裡是做一個"新的節點為新的head_node"Linked list { inverse=(link)malloc(sizeof(link));// inverse->chin=ptr->chin;// inverse->next=newhead;// newhead=inverse;// ptr=ptr->next; } //!!!!問題在這裡開始!!!!!!!!在上面這個while依序存入字元都還OK //但是從這裡開始,下面的while印初我存進去的字元資料時 //如果read.txt裡面是英文、數字、符號都可以正常的反轉 //但是如果內容是"中文",就會變成亂碼耶!!!!!!為什麼啊? ptr=newhead; while(ptr!=NULL) { printf("%c",ptr->chin); ptr=ptr->next; } printf("\n"); system("pause"); return 0; } 問題在程式碼中間得註解,請問有人碰到相同問題嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.235.48

06/04 12:45, , 1F
一個ASCII英數字只要1 byte, 換句話說1個char可以存入;
06/04 12:45, 1F

06/04 12:46, , 2F
一個Big5中文字要兩個byte, 其他編碼的則不確定; 你的
06/04 12:46, 2F

06/04 12:47, , 3F
LinkedList是以char為單位反轉, 所以破壞了原來中文的字
06/04 12:47, 3F

06/04 12:48, , 4F
碼組, 假如"中文"是0xA4 0xA4 0xA4 0xE5組合起來, 你反
06/04 12:48, 4F

06/04 12:49, , 5F
轉後變成 0xE5 0xA4 0xA4 0xA4, 會變成什麼就天知道了,
06/04 12:49, 5F

06/04 12:50, , 6F
尤其萬一中文文混打, 出現什麼詭異的結果都不奇怪@_@"
06/04 12:50, 6F

06/04 13:07, , 7F
喔喔~原來還有這個問題啊!
06/04 13:07, 7F

06/04 13:08, , 8F
那一般來說Big5編碼的中文應該怎樣儲存才不會有這問題呢?
06/04 13:08, 8F

06/04 13:12, , 9F
也許可以試試 wchar 吧, 當然對應的I/O API都要換w版.
06/04 13:12, 9F
文章代碼(AID): #1C28HGCd (C_and_CPP)