当从
FILE
流读取广泛的角色时,可以互换使用?fgetwc()
?
诱惑,假设
fread()
可能会这样起作用:
fgetwc()
尽管如此,我怀疑这种实施可能会在大型Endian系统上失败。
wint_t fgetwc(FILE *src) {
wchar_t c;
size_t n_bytes = fread(&c, sizeof (wchar_t), 1, src);
return (n_bytes == sizeof (wchar_t)) ? c : WEOF;
}
(如今,通常是UTF-8序列),并将其转换为
fgetwc
。同样,wchar_t
采用一个fputwc
并将其写出为多重序列。
如果您想实际读取或写入
wchar_t
单位,则需要使用
wchar_t
或fread
,并且如果the the the the the the the the the the the the the the the the the the the the Special的字节之一可能会以二进制模式打开文件在文本文件中处理。
fwrite
和wchar_t
被认为是面向字节的,因此不能将其与宽面向I/O.混合。注:显然,FGETWC和FPUTWC的Windows库实现确实读取和写入
fread
单位如果该文件以二进制模式打开。在文本模式下打开文件时,该行为如上所述。请参阅
MMSDN文档
可以互换使用? 不容易 一旦发生狭窄或宽的读/写入,流的方向
或)narrow
字符。是一个狭窄的功能。其他:fwrite
wchar_t
fgetwc()
是宽阔的。其他:fread()
.
使用fread()
或
fgetc, fgets, fprintf, fputc, fputs, fread, fscanf, fwrite, getc, getchar, printf, putc, putchar, puts, scanf, ungetc, vfprintf, vfscanf, vprintf, and vscanf
改变方向。
最不可能混合狭窄/宽功能,其他错误可能发生。
fgetwc()
是一个单独的问题。 OP'sfgetws, getwc, getwchar, fwscanf, wscanf, vfwscanf, vwscanf, fputwc, fputws, putwc, putwchar, fwprintf, wprintf, vfwprintf, vwprintf
没有考虑到方向,也没有肯定可以很好地处理endian问题。我认为
fwide()
是
内部表示,不是为外部使用而设计的。 据我所知,它们通常在不同系统之间的便携。 (例如,正如OP指出的那样,可能存在字节订购问题。)
我认为这就是为什么Rici的答案指出,“显而易见的”函数读取(分别写入)宽字符实际上,将(可能是多键)字符读成一个(分别,将宽字符作为一个可能是一个可能的字符多重字符) 另一方面,在编程时,可以理解的是,一个人想了解二进制表示形式,尤其是在射击麻烦时。 RICI的答案指出了一个人可能会如何倾倒,甚至以后,也可以使用相同的系统,负载,内部表示,测试,调试。