문제

2013-05-27 8 views
0
C의 UNIX FUNC "CP"의 아날로그 수행

제가 실현에 문제가있다 :문제

struct stat fsd; 
stat(argv[argc - 1], &fsd); 

if ((fsd.st_mode & S_IFMT) == S_IFDIR) { 

    unsigned int i; 

    for (i = src; i < argc - 1; i++) { 

     char *xpath = strcat(argv[argc - 1], "/"); 
       xpath = strcat(argv[argc - 1], argv[i]); 

     if (cpf(argv[i], xpath) == 0) { 

      printf("%s -> %s\n", argv[i], xpath); 
     } 

    } 
} 

예 명령 ./cp F1 F2 F3, F4 DIR
어디 : f * - 파일과 디렉토리 디렉토리. 그래서 파일을 dir에 복사해야하지만 dir에 대한 올바른 경로를 만들 수 없습니다.

는 출력 :

f1 -> dir/f1 
f2 -> dir/f1/f2 
f3 -> dir/f1/f2/f3 
f4 -> dir/f1/f2/f3/f4 

그러나 내가이 필요합니다

f1 -> dir/f1 
f2 -> dir/f2 
f3 -> dir/f3 
f4 -> dir/f4 

정말 그것을 해결하는 방법을 모르고 :(

+0

'strcat()'에 대한 맨 페이지를 읽어보십시오. 버퍼가 너무 작습니다. –

+0

'argv [argc-1]'은 끝에 쓰려고하지 않습니다. 쓸/추가 할 버퍼를 만듭니다. – mah

답변

2

가장 큰 문제, 많은이 없다, 그 두

xpath = strcat(argv[argc - 1], ... 

to argv [argc-1] 추가 텍스트.

나는 strcat()이 2 개의 문자열을 연결하고 입력에 영향을주지 않고 결합 결과를 답으로 제공한다고 생각합니다. 이 작업을 수행하지 않고 두 번째 매개 변수를 첫 번째 매개 변수에 추가하여 첫 번째 매개 변수를 반환합니다.

코드를 다시 작성하여 버퍼 작업 영역을 만드십시오.

char xpath[1000]; 
strcpy(xpath, argv[argc - 1]); 
strcat(xpath, "/"); 
strcat(xpath, argv[i]); 

참고 : sizeof() xpath는 MAXPATHLEN 또는 다른 시스템 상수 일 수 있지만 다른 질문입니다. #include limits.h을 참조하십시오.

+0

Thx 많은 도움을! :) – nemelianov