I'm working through "The C Programming Language" by K&R and example 1.5 has stumped me:
#include <stdio.h>
/* copy input to output; 1st version */
int main(int argc, char *argv[])
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
I understand that 'getchar()' takes a character for 'putchar()' to display. However, when I run the program in terminal, why is it that I can pass an entire line of characters for 'putchar()' to display?
我刚刚熟悉睡眠(),我发现了
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d",i);
sleep(1);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
这不会打印每次迭代的数量而是在循环时转储所有数字....但是当我修改printf时...
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d\n",i);
sleep(1);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
现在,当我添加'\n'新行时,它按预期工作...为什么它在前一个行为奇怪......
我对 C 比较陌生。我有一个要打印到标准输出的二进制缓冲区,如下所示:
unsigned char buffer[1024];
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 printf 将其输出到 stdout?我查看了 printf 的手册页,但是没有提到 an unsigned char*
,只有const char*
for %s
。
我想我可以遍历缓冲区并执行putchar(buffer[i])
,但是我认为这效率很低。有没有办法使用 printf 做到这一点?我应该改用类似的东西fwrite
,那会更合适吗?
谢谢。
编辑:抱歉造成混乱,我不想将任何内容转换为十六进制/二进制表示法,只需按原样写出缓冲区即可。例如,如果我[0x41 0x42 0x42 0x41]
在缓冲区中,那么我想打印“ABBA”。
以下C程序不会在屏幕上打印任何内容.
我编译了程序gcc
:
#include<stdio.h>
main()
{
printf("hai");
for(;;);
}
Run Code Online (Sandbox Code Playgroud)