C++调用system执行echo写文件时>运算符失效仅输出字面量如何解决
问题解答
该功能完全可实现,运行异常的原因和修复方案如下:
异常原因
system() 是C标准库提供的接口,要求入参为C风格的const char*类型,你直接传入std::string对象不符合C++语法规范,即使部分编译器强制通过编译,参数传递也会异常,导致shell无法正确解析重定向逻辑,最终直接输出整段命令内容。
修复方案
基础修复(适配绝大多数POSIX环境)
调用std::string的c_str()方法获取合法的C字符串指针传入,同时注意引入system对应的头文件:
#include <cstdlib> #include <string> int main() { std::string command = "echo 1 > myFile"; system(command.c_str()); return 0; }
高兼容修复(适配极简POSIX环境)
如果修改后仍存在问题,说明环境默认调用的sh不支持内置重定向逻辑,可显式指定用bash解析命令:
#include <cstdlib> #include <string> int main() { std::string command = "bash -c 'echo 1 > myFile'"; system(command.c_str()); return 0; }
内容的提问来源于stack exchange,提问作者Tab Caps
相关产品推荐
相关产品推荐

