gpt4 book ai didi

c - 运行程序的多个输入

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:47 25 4
gpt4 key购买 nike

我有以下 C 程序:

#include<stdio.h>
main()
{
char buf[64];
gets(buf);
printf("Your input: %s\n", buf);
gets(buf);
printf("Your input: %s\n", buf);
}

我想使用管道或重定向向程序发送数据。问题是程序不会等待第二次输入新数据。

例如

$ echo "a" | ./test 

输出:

Your input: a
Your input: a

我如何发送让程序在每次使用管道或重定向时等待用户输入。P.S 我没有写入/proc/$pid/fd/0 的权限,我也不必更改代码。

如有任何帮助,我们将不胜感激。

最佳答案

如果您使用管道 | 向命令输入数据,它会与终端的(输入部分)断开连接。 gets 读取第一行 "a\n" 并将其作为 "a\0" 写入 buf .然后它到达管道的末尾,或 EOF(文件末尾)。

你的第二个 gets 然后什么都不做(因为在 EOF 之后没有什么可读的)并且让 buf 单独使用; buf 仍然包含 "a\0",它被适本地打印出来。

进一步的提示:

  • 在执行 I/O 时,本质上随时可能会失败,您必须在每次调用后检查错误,否则会发生不好的事情。训练自己这样做并节省大量调试时间。

  • 永远不要执行像 gets(buf) 这样的 I/O,因为它会导致缓冲区溢出,这是计算安全的祸根。如果您输入任意数据,则必须使用允许您限制写入字节数的调用。 gets 的手册页在顶部包含“永远不要使用此功能”这句话。您可以找到其他更好的函数,read 是一个基线,如果您使用 C++,将会有很多其他的标准解决方案。

关于c - 运行程序的多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36626980/

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