使用fputc()写入一个字节

时间:2011-08-22 12:03:37

标签: c unicode char

给定unsigned char *str,一个UTF-8编码的字符串,用fputc((char)(*str), file);

写第一个字节(不是字符)是合法的

4 个答案:

答案 0 :(得分:2)

将演员表移至charfputc将字符写为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只会写一个字节。在这种情况下签名/未签名的演员阵容将阻止编译器对你呻吟。