给定unsigned char *str
,一个UTF-8编码的字符串,用fputc((char)(*str), file);
答案 0 :(得分:2)
将演员表移至char
。 fputc
将字符写为int
参数,其值应在 unsigned char
范围内,而不是char
。假设(unsigned char)(char)
充当unsigned char
值的标识运算符,代码中没有错误,但不保证特别是对于没有二进制补码的奇怪系统。
答案 1 :(得分:1)
这是合法的。 fputc
将其int
输入转换为unsigned char
,并且该转换无法做任何令人不愉快的事情。它只需要以UCHAR_MAX+1
为模的值。
如果您的实施中char
未签名,则从unsigned char
转换为char
不会影响该值。
如果您的实施已签署char
,则将大于CHAR_MAX
的值转换为char
要么具有实现定义的结果,要么提出信号(6.3.1.3/3 )。因此,虽然您的代码是合法的,但可能的行为包括提出终止程序的信号,这可能不是您想要的。
在实践中,您希望实现使用2的补码,并以“明显”的方式转换为带符号的类型,保留位模式。
即使没有其他任何问题,如果你向STDOUT写一个奇怪的字节,你的终端可能也不会做任何明智的事情。
答案 2 :(得分:0)
不,您必须传递FILE
指针作为第二个参数。这是您要将字符写入的文件句柄,例如stdout
。
fputc(*str, stdout);
答案 3 :(得分:0)
是的,这是合法的。 fputc只会写一个字节。在这种情况下签名/未签名的演员阵容将阻止编译器对你呻吟。