如何在C++函数内部调用System()函数?调用时文件处理问题求解
解决C++函数内调用system()的文件处理问题
你的代码里有两个关键问题导致文件处理出错,我来帮你逐一排查并解决:
1. fopen参数的错误
你写的FILE *in = fopen (in, "r");里,第一个参数in是未定义的变量,应该使用传入的函数参数f。而且因为f是std::string类型,需要转换成C风格字符串才能传给fopen,修正后应该是:
FILE *in = fopen(f.c_str(), "r");
当然,如果这个fopen操作不是你调用外部程序必须的步骤,也可以直接删掉这段代码。
2. system()命令字符串的拼接错误
你直接写system("./my_exe_file f output");时,这里的f会被当成字面量字符串"f",而不是你传入的函数参数f的实际值。要把变量的真实内容嵌入到命令里,必须先拼接出完整的命令字符串:
void call(std::string f){ // 拼接包含真实文件名的命令字符串 std::string cmd = "./my_exe_file " + f + " output"; // 将C++字符串转为C风格字符串传给system int status = system(cmd.c_str()); }
这样system执行的命令就会把f对应的实际文件名替换进去,和你在外部直接写死文件名的效果完全一致。
本质上,字符串字面量不会自动识别并替换其中的变量名,必须手动把变量内容拼接到命令字符串中,再传递给system函数。
内容的提问来源于stack exchange,提问作者user280163
相关产品推荐
相关产品推荐

