为什么printf没有输出字符串?
在freeBSD环境下, gcc 分步编译\汇编\链接以下代码
#include <stdio.h>
void main(int argc,char* argv[])
{
printf("hello world");
_exit(0);
}
编译/汇编:
gcc -c main.c
链接
ld main.o /usr/lib/crt1.o /usr/lib/crti.o -lc -e main
运行:
./a.out
运行没有报错, 但是什么也没有输出就结束了, 为什么??!!!
汇编 gcc c freebsd
[解决办法]
把你的_exit(0);去掉再试试
[解决办法]
exit函数在_exit函数的基础上进行了一些包装,在终止进程之前,它还会执行检查文件打开情况,清理I/O缓冲区等操作,例如把文件缓冲区的内容写回文件。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("Hello World!\n");//有换行符。
printf("OK");//注意:没有换行符。
_exit(0);//若用它,则不会输出OK。因为缓冲区的'OK"没有换行符,最终没有输出到终端,只输出Hello World,注意是在linux上。
exit(0);//若用它,则会输出OK.
}
楼主知道为什么了吧?
[解决办法]
printf 属于是行缓冲机制, 你要加一个换行符作为驱使信号; _exit 是直接调用系统调用结束进程,不会检查io缓冲区。
[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);
[解决办法]
_exit不做扫尾的工作,比如flush printf缓冲中的字符。