2017-12-04 43 views
1

system()을 사용하고 폴더를 압축하는 프로그램을 작성하고 싶습니다. 폴더 이름은 명령 줄을 통해 제공됩니다. C에서 시스템()을 사용하여 기념일에

#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

지금은 하나의 인수 만 있습니다. 나중에 내가 argv에서 두 개의 문자열을 두 문자열로 나누기를 원할 것이다. – 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

나는 그것을 programm , 나중에 압축 된 타르를 가져 와서 네트워크를 통해 다른 프로그램으로 보냅니다. 하지만 고마워요. – Henne