0

DELWin32 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使用する必要があります。プロセス名の引数としてchar配列を許可するCのサブプロセス関数は他にありますか?

4

1 に答える 1

2

それは苦痛ですが、おそらくすべてのエスケープ文字をエスケープ解除する必要があります。"\blah"->など。ここ"\\blah"でそれらのリストを参照してください。

あなたのコードに基づいて、私は(大まかに)次のようなことをします:

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

\\すべての問題のある文字、つまりとをエスケープしてパターンを指定し、\"sprintfを使用して最終的なフォーマット文字列を取得するというアイデアです。getenvからの文字列にはエスケープ文字の問題がないため、直接使用できます。

于 2010-04-25T18:08:10.300 に答える