当我运行下面的代码时,它会在第4行最后一行运行系统命令,然后再显示字符串'proceeding'!我想知道为什么以及如何修复它,任何想法?
if ((strlen(command)>0) && (command[strlen (command) - 1] == '\n'))
command[strlen (command) - 1] = '\0';
printf("proceeding"); // <-- the string
strcat(command,contents);
strcat(command,subject);
system(command); // <-- offending system command
sleep (1);
printf("\n ----- Search complete for: [%s]",command);
getchar();
当然有变量如'command'和'subject'在上面的代码之外被操作和声明,所以如果你需要上下文,我将发布下面的其余源代码。
答案 0 :(得分:2)
拉链并冲洗:
即
在
printf("proceeding");
把
fflush(stdout);
那将冲洗缓冲区中的东西(碗!)
执行系统命令之前。
答案 1 :(得分:1)
尝试在printf中添加'\ n'。
强制刷新printf缓冲区。否则,printf不必立即打印传递的参数。你可以谷歌冲洗缓冲后者
答案 2 :(得分:0)
stdout
is line buffered,所以它只会在到达换行符后显示缓冲区中的内容
将printf("proceeding");
更改为printf("proceeding\n");
或使用stdout
同步fflush(stdout);
即可完成工作。
答案 3 :(得分:0)
默认情况下,stdio stdout流是线路或完全缓冲的。要设置 unbuffered (并且为了避免在每次输出操作后都要编写fflush(stdout)
),请使用setvbuf
中声明的ISO C stdio.h
函数:
setvbuf(stdout, (char *)NULL, _IONBF, 0);
在进行第一次I / O之前。