C/C++如何通过命令行传递标准输入(非命令行参数)
解决方案
完全可以实现,无需修改现有C++代码,也不需要写入本地临时文件,利用Shell标准输入重定向和管道特性即可完成需求。
方案1:直接传入固定测试输入
如果要传入你示例中的固定输入内容,可以直接使用Here文档特性,命令如下:
g++ -std=c++17 -O2 -lm b.cpp && ./a.out << 'EOF' 7 1 2 2 4 2 6 7 5 3 6 4 6 7 2 EOF
Here文档会将两个EOF之间的内容直接传递给程序的标准输入,全程无磁盘写入操作。
方案2:拉取远程HTTP服务器输入直接传递
如果输入存储在远程HTTP服务器,使用curl拉取内容后通过管道直接传递给程序即可,命令如下:
g++ -std=c++17 -O2 -lm b.cpp && curl -s http://你的远程服务器地址/输入文件路径 | ./a.out
其中-s参数用于开启curl静默模式,避免输出进度、报错等多余内容干扰输入数据。管道会将curl拉取到的输入内容直接在内存中传递给C++程序的标准输入,cin可以正常读取内容,完全符合你提出的限制条件。
完整Shell自动化脚本示例
#!/bin/bash # 编译C++代码 g++ -std=c++17 -O2 -lm b.cpp # 判断编译是否成功 if [ $? -ne 0 ]; then echo "代码编译失败,退出执行" exit 1 fi # 拉取远程输入并执行程序 curl -s "http://替换为你的远程输入文件地址" | ./a.out
脚本编写完成后添加执行权限chmod +x run.sh即可直接运行实现自动化。
内容的提问来源于stack exchange,提问作者VJZ
相关产品推荐
相关产品推荐

