写一个测试工程,需要从 UNICODE 文本文件中一次读取一行,短时间没找到现成代码,急就章写了一个,不太严谨,勉强能用。见下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
wchar_t* fgetwln(wchar_t* dst, int size, FILE* fp) { int count = 0; wint_t wch; for(; wch = fgetwc(fp); ) { if(wch == WEOF) return count ? dst : NULL; if(wch == L'\n') { if(count > 1 && dst[count - 1] == L'\r') dst[count - 1] = 0; else dst[count] = 0; break; } dst[count++] = wch; if(count == size) break; } return dst; } |
顺便说一句,UNICODE 文本文件在打开时要以二进制的方式。
2012-05-29 修订版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
wchar_t* fgetwln(wchar_t* dst, int size, FILE* fp) { int count = 0; wint_t wch; for(; wch = fgetwc(fp); ) { if(wch == WEOF) return count ? dst : NULL; if(wch == L'\n') { if(count > 0 && dst[count - 1] == L'\r') count--; dst[count++] = ch; dst[count] = 0; break; } dst[count++] = wch; if(count == size) break; } return dst; } |
—— 记于百度空间