0

我正在尝试DEL在 Win32 C 程序中执行 MS-DOS 命令,我已经知道system并且popen可以用于此。但是,问题在于const char命令都需要字符串文字(type),我需要类似于此 Perl 代码的 DOS 等价物(或多或少,不知道它是否真的有效):

my $user = $ENV{'USERNAME'};
my $directory = $ENV{'HOME'};
my $files = system("dir " . $directory);
my $pattern = "s/(\d{7,8})|(\"" . $user . "\")/";
$files ~= $pattern;
system("rm " . $files);

这显然必须对命令使用字符串文字rm。C 中是否还有其他一些子进程函数允许将 char 数组作为进程名称的参数?

4

1 回答 1

2

这很痛苦,但您可能最终不得不取消转义所有转义字符。"\blah"->"\\blah"等。在此处查看它们的列表。

根据您的代码,我会(大致)执行以下操作:

pattern = "s/(\\d{7,8})|(\\\"%s\\\")/";
char buff[100];
sprintf(buff, getenv("HOME"));
system(buff);

这个想法是指定所有令人不安的字符转义的模式,即\\and \",然后使用 sprintf 来获取最终的格式字符串。getenv 的字符串不会有转义字符的问题,所以可以直接使用。

于 2010-04-25T18:08:10.300 回答