r-6ren">
gpt4 book ai didi

c - 如何在 "system"命令中包含字符串变量 (char *) - linux

转载 作者:IT王子 更新时间:2023-10-29 00:47:21 26 4
gpt4 key购买 nike

char * S = "你好";//假设它是正确动态分配的

当 S 被视为值为“hello”的字符串时,我想在下面的语句中使用 S。

system("grep S searchtext.txt > result.txt");

我该怎么做?

最佳答案

一般来说,像这样使用 system 是一个非常非常糟糕的主意。 system 通过 shell 运行命令,这意味着您传递给 system 的字符串受 shell 的所有变量扩展、命令扩展、特殊字符解释等

如果您坚持使用系统,您必须首先净化您的字符串。最简单的方法是:

char *tmp = malloc(4*strlen(S)+3);
tmp[0] = '\'';
for (i=0,j=1; tmp[j]=S[i]; i++, j++)
if (S[i]=='\'') tmp[++j]='\\', tmp[++j]='\'', tmp[++j]='\'';
tmp[j++] = '\'';
tmp[j++] = 0;
if (snprintf(cmd, sizeof cmd, "foo %s ...", tmp) >= sizeof cmd) goto error;
system(cmd);

此代码将整个字符串 S 单引号括起来,并将任何嵌入的单引号替换为 '\''。请注意,我还检查了命令行截断情况,以防它可能导致执行危险命令。

更好的选择是完全放弃 system 并执行您自己的 forkexec 来绕过 shell。然后就没有命令行可以解释了;您可以完全控制传递给外部程序的参数(*argv[] 数组)。

关于c - 如何在 "system"命令中包含字符串变量 (char *) - linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291380/

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