为啥在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗?
Posted
技术标签:
【中文标题】为啥在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗?【英文标题】:Why I cannot see the output of hello world without getch() in terminal; while I can see for multiple printf with memcpy() function?为什么在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗? 【发布时间】:2015-01-05 18:49:57 【问题描述】:我使用 scanf 查看终端中的字符串。我不需要使用 scanf() 来查看以下代码 part2 中的 printf() 值吗?
第 1 部分:
int main ()
int c;
printf("hi there");
scanf ("hey %d",c);// to check the output
return(0);
第二部分:
int main ()
const char src[50] = "When in Rome, do as the Romans";
char dest[50];
printf("Before memcpy dest = %s\n", dest);
printf("Before memcpy src1 = %s\n", src);
memcpy (dest, src, strlen(src)+1);//copying the address
printf("After memcpy dest = %s\n", dest);
printf("Before memcpy src2 = %s\n", src);
为什么我不能在终端中看到没有 scanf() 的 hello world 的输出;而我可以通过 memcpy() 函数看到多个 printf?
【问题讨论】:
等等,什么?,你的问题没有意义!printf("hi there\n");
这是你的问题吗?
什么“你好”?请注意,C 输出函数将缓冲输出,直到在流中遇到换行符。如果你有printf("Hi there\n");
,你会立即得到输出。
Why does printf not flush after the call unless a newline is in the format string? 的可能重复项
【参考方案1】:
2 fixes:
用换行符刷新缓冲区
printf("hi there\n");
使用未初始化的变量会导致未定义的行为。
printf("Before memcpy dest = %s\n", dest);
【讨论】:
使用\n
刷新仅在流被行缓冲(根据实现、运气或程序员故意选择的交互式设备)时才有效。
@Deduplicator 看起来像一个明确的printf()
如果输出没有被输出那么这应该是问题没有其他可能导致这个问题
@Gopi Deduplicator 的意思是 fflush(stdout)
将是比 printf("\n")
更好的解决方案,因为无论输出流的缓冲模式如何,它都应该工作。以上是关于为啥在终端中没有 getch() 就看不到 hello world 的输出;虽然我可以使用 memcpy() 函数查看多个 printf 吗?的主要内容,如果未能解决你的问题,请参考以下文章