我是C语言上的菜鸟,试图使用write()
函数显示整数。
这些是我的代码:
int n = 7;
write(1, &n, 4);
我想显示7
,但是当我将n
设置为一个大数字时,程序什么也不显示或其他奇怪的字符。
我想念什么?
int
之类的对象在内存中用各种位表示。 write
例程恰好将内存的那些位传输到其目的地。
终端并非旨在显示内存的任意位。它们不会将这些位解释为表示int
或其他对象,然后显示该解释。通常,我们将characters发送到终端。更具体地说,我们发送代表字符的代码。终端被设计为接收这些代码并显示少量文字图片(字符,字形,表情符号等)。
要使终端显示“ 7”,我们需要向其发送代码“ 7”。字符的通用代码系统是ASCII(美国信息交换标准代码)。 “ 7”的ASCII码为55。因此,如果您这样做:
char x = 55;
write(1, &x, 1);
然后,如果使用ASCII,终端将在显示屏上显示“ 7”。
因此write
是错误的例程,用于显示供人阅读的int
值。相反,通常使用printf
,如下所示:
printf("%d", n);
f
中的printf
代表formatted
。它检查表示n
中值的位,并将表示的值格式化为供人类阅读的字符,然后将这些字符写入标准输出。
如果要使用write
将字符传输到终端,则可以使用sprintf
仅获取printf
的格式化部分,而无需打印部分。对于初学者,此代码将起作用:
char buffer[80]; // Make space for sprintf to work in.
int LengthUsed = sprintf(buffer, "%d", n); // Format n in decimal.
write(1, buffer, LengthUsed); // Write the characters.
((更复杂的代码将使缓冲区大小适应sprintf
所需的大小。)
[如果要在命令提示符下将其打印出来,请仅使用printf()
:
int n = 7;
printf("%i",n);
使用write()
功能是否有特殊意图?如果是这样,请添加更多代码。
Write函数是系统调用。它用于将缓冲区的内容写入声明的输出或流。您不应该使用write。相反,您必须使用printf(" ", ...)
。您的情况:
printf("%d", n);
或
print("%d\n",n);
如果要写在一行上并做一个结束行(跳下一条)。
有关printf的更多信息,请参见:printf