2016-04-10 29 views
-1

私はC言語の新人です。このプログラムを単純化するのに問題がありました。私は最初にnamestrcatnameからcommandの間で初期化しようとしています。これは、ファイル名 "new py"または "new txt"、または "new py script"に対して2つの引数と1つのオプションの引数を取るコマンドライン実行可能ファイルです。私はコンパイルするためにWindowsのMinGWを実行します。Sprintfでポインタ、定数、文字列の書式設定

argv値と1行の文字列定数の格納を許可するタイプはありますか?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    char command[100] = "cd . > "; 
    char *type = argv[1]; 
    char * name; 
    strcat(command,"\""); 
    if (argc == 3) { 
     char * name = argv[2]; 
     //strcat(command,name); 
    } else { 
     char name[20]; 
     sprintf(name,"new %s file",type); 
     //strcat(command,str); 
    } 
    strcat(command,name); 
    strcat(command,"."); 
    strcat(command,type); 
    strcat(command,"\""); 
    system(command); 
    return 0; 
} 
+1

'char * name = argv [2];'と 'char name [20];'はif-elseブロックのローカルスコープにあります。修正例: 'char name [20]; if(argc == 3){strcpy(name、argv [2]); } else {sprintf(名前、 "新しい%sファイル"、タイプ); } strcat(command、name); ' – BLUEPIXY

+0

ありがとう。それは今のところ固定です。 strcatsの代わりにコマンドの残りの部分をsprintfできると思いますか? –

+0

お気に入りのいずれか。 – BLUEPIXY

答えて

0

BLUEPIXYで述べたように、私のブロックは "char name[20]; if(argc == 3){ strcpy(name, argv[2]); } else { sprintf(name,"new %s file",type); } strcat(command, name);" を含める必要があります。これらの変更の後、strcatのすべてをに変更しました。sprinfです。

私はこれまでのところ、argvの項目を格納するために、argsは定義されないため、コンパイルにはcharポインタが必要であるということを理解していました。彼らはnameの初期化のためにもはや必要ではありません。

私の今凝縮コードはこれです:再び

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    char command[100]; 
    char * type = argv[1]; 
    char name[50]; 
    if (argc == 3) { 
     strcpy(name, argv[2]); 
    } else { 
     sprintf(name,"new %s file",type); 
    } 
    sprintf(command,"cd . > \"%s.%s\"",name,type); 
    system(command); 
    return 0; 
} 

、私の誤解をクリアするためにあなたBLUEPIXYに感謝。

+0

'name'や' type'に '' 'が含まれていると恐ろしいことが起きることに注意してください。これらのことは、このプログラムの制限を認識している完全に信頼できるソースから来たものであることを確認してください。 –

+0

注: ) ' – wildplasser

関連する問題