2017-12-04 76 views
1

system()を使用し、フォルダを圧縮するプログラムを作成したいと考えています。フォルダ名はコマンドラインで指定します。これは私が持っているものです。Cで記念碑を持つsystem()を使用する

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

int main(int argc, char** argv){ 
    int i; 
    char buf[64] 
    char string[]="tar -cf stent.tar "; 
    if(argc>1){ 
    for(i=1;i<argc;i++){ 
     string[16]=(char)argv[i]; 
     printf("%s",argv[i]); 
    } 
    } 
    snprintf(buf,sizeof(buf), "tar -cf stent.tar %s," argv); 
    printf(string); 
    printf(buf); 
    return 0; 
} 

は基本的に私はこれを行うことを望む:

system("tar -cf stent.tar %s", buf); 

bufは、ユーザの入力引数にする必要があります。彼が圧縮したいフォルダ

+0

あなたのコマンドにすべての引数を渡したいですか? –

+0

今のところ引数は1つだけです。後で私は2つの文字列でargvの2つの引数を分割したいでしょう – Henne

+1

[sprintf](http://www.cplusplus.com/reference/cstdio/sprintf/)を使用して解決しようとします – Lasoloz

答えて

4

おそらく、tarコマンドにフォルダ名の引数が渡されます。しかし、コマンドラインからやってみるのはなぜかというと神秘です。

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

int main(int argc, char *argv[]){ 
    char buf[1024]; 
    if(argc > 1){ 
     sprintf(buf, "tar -cf stent.tar %s", argv[1]); 
     system(buf); 
    } 
    return 0; 
} 

バッファオーバーフローが発生する可能性があります。

+0

私はそれを行う必要があります、後で私は圧縮されたタールを取って、ネットワークを介して別のプログラムに送ります。しかし、ありがとう – Henne

関連する問題