• ベストアンサー

system関数がうまくいかない

windows c++ でsystem関数を使い任意の実行ファイルを動かそうとしてもうまくいきません。 エラーはcharからintにイニシャライズできません となります。また実行ファイルにスペースがあったら不味いのでしょうか。 #include <stdio.h> #include <stdlib.h> int main (void) { int=system("C:/Documents and Settings/shun/My Documents/aaa/project abc1/Debug/project abc1.exe"); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

int の扱いは、既に回答があるとおりです。 また、system() 関数は、引数を単純に cmd.exe に渡すだけでして、スペースはまずいです。このばあい、" でくくる必要があります。また、Windows だと、ディレクトリの区切りが / であるのもまずいでしょう。 (純粋にファイルを扱う場合は、/ も使えます) system("\"C:\\Documents and Settings\\shun\\My Documents\\aaa\\project abc1\\Debug\\project abc1.exe\""); です。

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

#4の方が回答されている通り、おそらく二重引用符で括る必要があると思います。(十中八九間違いないですが、私が知らない処理系の動作まではわかりませんので...) ディレクトリの区切りの / に関しては、Windowsであっても、CygwinとかならそれでOKです。 system関数の動作は、完全に処理系に依存しますので、具体的にどんな処理系を使っているかを書きましょう。

kitakazetotaiyou
質問者

お礼

皆様本当にありがとうございます。 おかげさまで助かりました。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

その""で囲まれた部分を実際にコマンドプロンプトで入れてみよう 多分正しく動かないから。 で、どうすれば動くか工夫しよう。 それから、プログラム上で再現しよう。

  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.2

とりあえず"int="になってるのは確実に文法違反。"int"は予約語だから変数名に使えないし、そもそも宣言されてないし。 値を受け取っても使わないなら素直に破棄したらどうですか。 あえて受け取りたいなら"int=system..."でなく"int tmp=system..."といったように書くべき。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

少なくとも、 > int=system("... ではダメです。 宣言したいのなら、オブジェクト名を書いてください。

kitakazetotaiyou
質問者

お礼

ご指摘ありがとうございます。 int を消して system("C:/Documents and Settings/shun/My Documents/aaa/project abc1/Debug/project abc1.exe") のみで実行したところコマンドプロンプトで 'C:/Documents' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてしまい、実行されません。これはどうしてなのでしょうか?

関連するQ&A

  • 配列について

    Visual c++なのですが #include<stdio.h> #include<stdlib.h> int main(){ FILE *fin,*fout; int HAP[135135][14];   long i,j; long x=135135,y=14; ・・・ のときは実行可能なのですが、 #include<stdio.h> #include<stdlib.h> int main(){ FILE *fin,*fout; int HAP[135135][14];   long i,j; long x=135135,y=14; ・・・ のときはビルトは可能できますが、デバックすると動作を停止してしまいます。なぜできないのかわからないで悩んでいます。是非教えてください。 ・・・の部分はほぼ同文です

  • system関数について

    cygwinでC言語を勉強しています。 そして昨日system関数の存在を知ったのでこんなプログラムを書いて見ました。 #include <stdio.h> #include <stdlib.h> main() { system("pwd"); system("cd .."); system("pwd"); } すると、結果は /home/prg/ /home/prg/ となりました。"cd .."を実行しているのですから /home/prg/ /home/ とならないのはなぜでしょうか? どうしても、わかりません。どうかよろしくお願いします。

  • system関数を使用してsuコマンドを実行したいのですが

    Linux RedHat7.2の環境にて、system関数を使用してsuコマンドを実行し、ルートになりたいのですが(さらにその後rebootしたい)、以下の結果のようになってしまいルートになれません。system()の使用方法がまずいのでしょうか。 どなたか助けてください。お願いします。 --------------------------ソースコード-------------------------------- #include <stdio.h> #include <stdlib.h> int main( int argc, char **argv) { int i; i = system("su - password"); i = system("reboot"); return 0; } --------------------------ソースコード-------------------------------- --------------------------結果-------------------------------- [nmpb@nmpb_linux02 BIN]$ ./aaa.out su: user password does not exist --------------------------結果--------------------------------

  • llc system("dir").c

    llcのDOSコンパイラでsystem("dir");というソースを 含めると、その部分で実行時に 正しいコマンド インタープリタの名前を入力してください. (例 : C:\COMMAND.COM) >> というメッセージが表示されます。 #include <iostream.h> int main() { system("dir"); return 0; } このソースをDOSコンパイラ用に書き換えたいのです。 #include <stdio.h> int main() { system("dir"); return 0; } このようにするとllcでコンパイルできますが、おそらく #include <stdio.h>しか使っていないためにsystem関数がうまく 動作しないようです。 どうしたらシステム関数のようなことができますか?

  • C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると

    C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。

  • VCでストップウォッチを作りたいのですが、うまくいきません。

    こんにちは。私は30代の男性です。 「Visual C++ の初歩(http://www.gulf.or.jp/~damayan/vc/visualc2.htm)」というサイトで、ストップウォッチプロジェクトファイルがダウンロードできたので、コピペしてコンパイルしようと思ったのですが、うまくいきませんでした。 いつも下記のようなエラーメッセージが表示されます。ヘッダーファイルに「stdafx.h」は置いてあるのですが、やり方が間違っているのでしょうか? ちなみに、ダウンロードした「release」ファイルの中のexeファイルを起動すれば、実行はされます。「自分が新規でプロジェクトファイルを作り、ダウンロードしたソースをコピーしてコンパイルを試みても、うまくいかない。」という話です。 よきアドバイスを頂ければと思います。 宜しくお願い致します。 ----- ビルド開始: プロジェクト: abc, 構成: Debug Win32 ------ コンパイルしています... abc.cpp c:\documents and settings\my documents\visual studio 2005\projects\abc\abc\abc.cpp(111) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ビルドログは "file://c:\Documents and Settings\My Documents\Visual Studio 2005\Projects\abc\abc\Debug\BuildLog.htm" に保存されました。 abc - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

  • 関数内の変数の扱い方に関する質問です

    Aという関数を作って、メイン関数内の時刻t(0から100)において10おきにplanという変数を変えるプログラムをつくっています。 しかし、メイン関数内の、if(plan == 2){printf("実行\n");}の部分が無視されてしまいます。(関数A内で使ったplanという変数はメイン関数では使えないのですか??)planが2の時に実行と表示させたいのですが、良い方法はありませんでしょうか?どうかよろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int A(int ,int); int main() { int t=0,plan; for(t=0;t<100;t++){ A(t,plan); if(plan == 2){printf("実行\n");} } return 0; } int A(int t,int plan) { if(t % 20 < 10) plan = 1; else plan = 2; }

  • 文字化け

    C言語初心者です。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("表示"); system("PAUSE"); return 0; } と書いてコンパイルしたのですが「表示」のところが文字化けしてしまいます。 他にも文字化けするかもしれないので、 解決法を教えて下さい。 使っているコンパイラは、Bloodshed Dev-C++です。

  • time関数

    time関数で取得した値をファイル名として、任意のディレクトリにファイルを作成したいのですが、実装方法がわかりません お分かりの方、教えていただけませんでしょうか #include<stdio.h> #include <stdlib.h> #include <time.h> #include<sys/types.h> #include<unistd.h> time_t time(time_t *tloc); int main(void){ char keys[16] = "\x00"; time_t t; t = time(&t); printf("%ld\n", t); FILE *fp; fp = fopen(・・・・・ "w");    :     :     : fclose(fp);

  • メモリ確保の謎。

    C言語のメモリの確保の所でふと疑問に思ったのですが、 malloc,calloc,realloc,memset,memcpyなどの関数を使うときって #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <malloc.h> とか書かないといけないと本にはありますが、#include <stdio.h>だけで なんのエラーにもならずに実行できてしまうのはなぜでしょうか? 実際のプログラムにはmallocとreallocしか使ってないのですが、#include <stdio.h>でできてしまいます。 でも教科書には他にも書かなきゃいけないとかいてありますが、なぜ書かなくても実行できてしまうのでしょうか?

専門家に質問してみよう