system関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みけCAT

system関数

#1

投稿記事 by みけCAT » 15年前

開発環境はDev-C++4.9.9.2、コンパイラはデフォルトです。
この環境でC言語のCUIプログラムの実行結果が見えるように、
プログラムを起動してポーズするプログラムを書きました。
ほとんどうまくいったのですが、コマンドラインとして「"」を含むものを入力すると、
エラーが出ます。
1)「runpause.exe "D:\zikken\test.exe" /c」をコマンドプロンプトに打ち込んで起動しました。
2)コマンドラインとして「"1"」を入力しました。
3)以下のエラーが出ました。
'D:\zikken\test.exe" "1' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char* argv[/url]) {
    char cmd[10000];
    char runcmd[10000];
    int i;
    if(argc<2)return 1;
    strcpy(runcmd,"\"");
    strcat(runcmd,argv[1]);
    strcat(runcmd,"\"");
    if(argc>=3) {
        fprintf(stderr,"コマンドラインを入力してください。\n");
        fgets(cmd,sizeof(cmd),stdin);
        for(i=0;cmd!=0;i++) {
            if(cmd==0x0A || cmd==0x0D)cmd=0;
        }
        strcat(runcmd," ");
        strcat(runcmd,cmd);
    }
    system(runcmd);
    system("pause");
    return 0;
}

D:\zikken\test.exeのソースコード
#include <stdio.h>

int main(int argc,char* argv[/url]) {
    int i;
    for(i=0;i<argc;i++) {
        printf("%s\n",argv);
    }
    return 0;
}


(追記)解決方法がわかる方がいらっしゃいましたら教えていただければ幸いです。 画像

シエル

Re:system関数

#2

投稿記事 by シエル » 15年前

1ってtest.exeに対するコマンドラインですか?

だったら↓のように""で囲まなければいけないのではないでしょうか?
"D:\zikken\test.exe 1"

あまり自信ないので、間違ってたらすみません。。。

みけCAT

Re:system関数

#3

投稿記事 by みけCAT » 15年前

コマンドラインを入力するところで「"1"」ではなく「1」と入力すると正常に動作します。
この時、system関数に渡すパラメータは
「"D:\zikken\test.exe" 1」となっているはずです。

アビゲイル

Re:system関数

#4

投稿記事 by アビゲイル » 15年前

D:\zikken にパスが通ってないとか。

(追記)ですよね 画像

みけCAT

Re:system関数

#5

投稿記事 by みけCAT » 15年前

>D:\zikken にパスが通ってないとか。
パスというのは、この場合、
たとえばD:\zikkenにパスを通すとtest.exeと入力するだけで起動できるというものですよね。
違っていたらすみません。

もしそうだとすると、この場合「D:\zikken\test.exe」というように、
フルパスで指定しているから関係ない気がしますが、どうでしょうか?

シエル

Re:system関数

#6

投稿記事 by シエル » 15年前

とりあえず、コマンドライン引数が1だったら
"D:\zikken\test.exe 1"という文字列が作られるようにして、
system関数に渡せるようにすれば、動くんじゃないかと。 画像

みけCAT

Re:system関数

#7

投稿記事 by みけCAT » 15年前

なぜかはわかりませんが動きました。
コマンドライン引数に「"1 2 3"」などの「"」で囲まれた文字列を入力しても動作します。
実行するファイルを「D:\The test\test.exe」というスペースを含んだものにしても動作します。
ありがとうございました。
<pre#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char* argv[/url]) {
char cmd[10000];
char runcmd[10000];
int i;
if(argc<2)return 1;
strcpy(runcmd,"\"\"");
strcat(runcmd,argv[1]);
strcat(runcmd,"\"");
if(argc>=3) {
fprintf(stderr,"コマンドラインを入力してください。\n");
fgets(cmd,sizeof(cmd),stdin);
for(i=0;cmd!=0;i++) {
if(cmd==0x0A || cmd==0x0D)cmd=0;
}
strcat(runcmd," ");
strcat(runcmd,cmd);
}
strcat(runcmd,"\"");
system(runcmd);
system("pause");
return 0;
}
[/pre]

閉鎖

“C言語何でも質問掲示板” へ戻る