user-0 提问: tcc-0.9.26 ：在网上看到《用C语言采用模拟DFA(确定性有限自动机)算法编写一个扫描器》将里面的代码编译报错

回复:
user: user-1
content: 纠正上帖： 在记事本里面打开q.csv,另存为，编码选Unicode。再试试。  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-1
content: 引用 3 楼 dynamic_Tiger 的回复:谢谢你 还想咨询一下 上段程序通过了编译 但是执行“wprintf”后面的汉字显示都是乱码 请问该如何处理？ 项目属性里面设置字符集使用“多字节字符集”试试。

user: user-1
content: 参考《编译原理》中的词法分析和有限状态自动机。

user: user-1
content: 仅供参考// 有如下字符串，分隔符是 '","' 即双引号逗号双引号，是3个字符，不是一个逗号，也就是逗号分隔双引号包含的CSV格式 // "123","ab,cd","GG"GG","你好","100","99987","","PPP" // 双引号内也可能含有逗号和双引号 // // 双引号内的内容表示字段,例子共8个字段，双引号内的内容可能什么也没有，比如倒数第二个字段 // 这8个字段的内容分别是 123   ab,cd   GG"GG  你好  100  99987 NULL  PPP // 汉字编码是GBK,文件q.csv里面有两行"123","ab,cd","GG"GG","你好","100","99987","","PPP" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #define MAXF 100     //每行最多字段数 #define MAXC 20      //每字段最多字符数 #define MAXW 3000    //每行最多字符数 #define MAXL 1000000 //最多行数 wchar_t str[MAXW]; int s,i,n; wchar_t c; wchar_t d[MAXF][MAXC]; wchar_t *p; FILE *f; int ln; int parse() {     wprintf(L"第%d行:",ln+1);     wprintf(L"%s\n",str);     s=0;     i=0;     n=0;     while (1) {         c=str[i];         switch (s) {         case 0:             if (c==0) goto SHOW;             if (c==L'\"') {                 s=1;                 p=str+i+1;             } else {                fwprintf(stderr,L"第%d行第%d个字符处格式错误！期望双引号。\n",ln+1,i);                 return 1;             }         break;         case 1:             if (c==0) {                fwprintf(stderr,L"第%d行第%d个字符处格式错误！期望双引号。\n",ln+1,i);                 return 1;             }             if (c==L'\"' && (str[i+1]==L',' || str[i+1]==0)) {                 if ((str+i)-p>MAXC-1) fwprintf(stderr,L"第%d行第%d个字段多于%d的字符被忽略。\n",ln+1,n+1,MAXC-1);                 wcsncpy(d[n],p,__min((str+i)-p,MAXC-1));d[n][MAXC-1]=0;                 n++;                 if (n>=MAXF) {                    fwprintf(stderr,L"第%d行多于%d的字段被忽略。\n",ln+1,MAXF);                     goto SHOW;                 }                 if (str[i+1]==0) goto SHOW;                 if (str[i+1]==L',') {                     i++;                     s=0;                 }             }         break;         }         i++;     } SHOW:     wprintf(L"第%d行:",ln+1);     wprintf(L"%d个字段",n);     for (i=0;i<n;i++) {         wprintf(L"[%s]",d[i]);     }     wprintf(L"\n");     return 0; } int main() {     _wsetlocale(LC_ALL,L"chs");     f=_wfopen(L"q.csv",L"r");     if (NULL==f) {         fwprintf(stderr,L"打开文件q.csv失败！\n");         return 1;     }     ln=0;     while (1) {         if (NULL==fgetws(str,MAXW,f)) break;         if (L'\n'==str[wcslen(str)-1]) {             str[wcslen(str)-1]=0;         } else {             fwprintf(stderr,L"第%d行太长！(>%d个字符)\n",ln+1,MAXW);             break;         }         parse();         ln++;         if (ln>=MAXL) {            fwprintf(stderr,L"多于%d的行被忽略。\n",MAXL);             break;         }     }     fclose(f);     return 0; } //第1行:"123","ab,cd","GG"GG","你好","100","99987","","PPP" //第1行:8个字段[123][ab,cd][GG"GG][你好][100][99987][][PPP] //第2行:"123","ab,cd","GG"GG","你好","100","99987","","PPP" //第2行:8个字段[123][ab,cd][GG"GG][你好][100][99987][][PPP]

user: user-0

user: user-0
content: 谢谢你 还想咨询一下 上段程序通过了编译 但是执行“wprintf”后面的汉字显示都是乱码 请问该如何处理？