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
并执行您自己的 fork
和 exec
来绕过 shell。然后就没有命令行可以解释了;您可以完全控制传递给外部程序的参数(*argv[]
数组)。
关于c - 如何在 "system"命令中包含字符串变量 (char *) - linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291380/