gpt4 book ai didi

c - 隐藏的可打印文本

转载 作者:行者123 更新时间:2023-11-30 18:35:47 26 4
gpt4 key购买 nike

我构建了一个小程序,只需从 input.txt 复制文本即可。文件到output.txt文件。使用该命令没有明显问题:

./myCopier.txt < rand.txt > randout.txt

在 GCC89 编译器上,用于教学目的。

#include<stdio.h>

int main(void){
int c;

while ((c = getchar()) != EOF)
putchar(c);

/*The text in printf() does not appear anywhere*/

printf("My theories and toughts!\n");
}

稍后,我添加printf()为了打印我对该程序如何工作的想法。即使使用限制性参数( -Wall ),它也可以编译而不会出现错误或警告,但此文本不会出现在任何地方。在任何地方,我的意思都是 output.txt和标准输出。

我认为:

  1. 命令./myCopier.exe单独显然会造成无限循环。没有文本输入就没有EOL字符,因此 print()永远无法到达命令。
  2. 那么,为什么当提供输入时,printf()命令没有明显效果?我期望来自 printf() 的文本就在循环关闭时出现在标准输出上并且 output.txt被 build 。为什么没有发生?
  3. 我的理论是 ./myCopier.txt < rand.txt > randout.txt不允许。由于某种原因,它使得程序只将输入传输到输出,“忽略”一切并非来自输入的东西。我对么?如果是这样,为什么?

如果您对更详细的问题感兴趣,这里是汇编代码:

http://text-share.com/view/79f31f38

最佳答案

在 main() 中省略 return 语句会导致 C89/C90 中出现未定义的行为。

通常,从 main() 返回会强制刷新输出缓冲区。如果省略 return 语句,任何事情都可能发生。

  • 尝试按照 C90 中的要求在 main() 末尾添加 return 0。否则,c90/gnu90 模式下的 GCC 会警告您:“控制到达非 void 函数的末尾”。
  • 尝试添加 fflush(stdout);

关于c - 隐藏的可打印文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44947173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com