为啥在终端中没有 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

诅咒库:为啥 getch() 清除我的屏幕?

c语言 运行完就直接退出了,看不到结果

为啥我需要两个 _getch() 才能获得正确的值? [复制]

明明打印到文件了,为啥tail -f看不到

ubuntu为啥克隆不到mininet

为啥在ubuntu的终端输入的命令sudo mkdir /etc/mentohust 后说 找不到命令