float c;
c = 'a';
while (c <= 'z')
{
write(1, &c, 1);
c++;
}
write() 与数据类型无关。 它应该向终端传送正确的代码点值。 然后,终端应根据其字符编码方案(通常是 UTF-8)来解释它。
问题 为什么此代码输出空行而不是字母表? (这个问题的目标是了解工作的底层机制)
我检查过的内容 我打印出了每个递增的 c 的浮点值。 我似乎总是得到正确的代码点值(“t”为 116.0000000,“u”为 117.0000000 等) 我怀疑问题是由于将代码点值存储为浮点数而引起的,这可能会以某种方式导致精度损失。
您要求写入浮点数的第一个字节。这不会产生任何有用的东西。
让我们看看这个程序:
char c = 'a';
write(1, &c, 1);
int i = 'a';
write(1, &i, 1);
float f = 'a';
write(1, &f, 1);
首先,
'a'
只是65
[1]的另一种写法,这是一个int
值。
c
、i
和f
都会被初始化为值65,但不同类型的存储方式不同。
char
,其值为 65
存储为字节 41
(十六进制)。[1]int
的 65
存储为字节 00 00 00 41
或 00 00 00 00 00 00 00 41
。[1]float
的 65
将存储为字节 00 00 82 42
。[1]对
write
的后续调用将输出这些字节中的第一个字节。
41
为 char
。您的终端将其显示为 a
.[1]00
为 int
。您的终端可能会将其显示为空白区域。00
为 float
。您的终端可能会将其显示为空白区域。