2014-09-18 4 views
-1

C lang을 사용하여 한 파일에서 다른 파일로 유닉스 텍스트를 복사하려고합니다. 아래는 내 코드의 일부입니다. 내가 프로그램을 실행할 때 분할 오류 오류가 발생했습니다.유닉스에서 파일 복사 중 세그먼트 오류

감사 어떤 도움 ..

#include<fcntl.h> 
#include<unistd.h> 
#include<stdio.h> 

int main (int argc, char *argv[]) 
{ 
    char buffer[BUFFSIZE]; 
    int infile; 
    int outfile; 
    int n; 
    size_t size; 
    printf("Enter the Source file name: \n"); 
    scanf("%s",&argv[1]); 
    printf("Enter the Destination file name : \n"); 
    scanf("%s", &argv[2]); 

    if((infile = open(argv[1], O_RDONLY,0)) < 0) 
    { 
     perror("Source file does not exist"); 
     return -1; 
    } 

    if((outfile=open(argv[2],O_WRONLY,0644))>0) 

    { 
     printf("Target/Destination File Exists:\n \n "); 

     //printf("Target Fiel Exists , Do you wish to Overwrite or Appened Data to it: \n \n    1=Yes(Overwrite),\n 0=No(Append):\n"); 
     scanf("%d",&n); 

     if(n==1) 
     { 
      if((outfile=open(argv[2],O_WRONLY|O_CREAT |O_EXCL, 0644)>=0)) 
      { 
       printf("File is Being opened in Overwrite Mode: \n  \n");//File is overwrited 
      } 
     } 
    } 
} 
+0

모든 경고와 디버그 정보로 컴파일 했습니까? 'gcc -Wall -g'? 디버거'gdb'를 사용 했습니까? –

답변

2

그것은 당신의 argv 배열로 데이터를 읽고 매우, 매우 이례적인입니다. 아마 그 일을 생각하면 안됩니다. 당신이 정말로 그렇게하고 싶어해도

, 다음은 여전히 ​​잘못된 것 : 그 함수 호출이 메모리에 문자열을 읽을 수 있도록 argcv

scanf("%s",&argv[1]); 

요소가 포인터 문자열에이됩니다 포인터를 저장합니다. argv[1] 철자가 유효하지 않으며, 입력 된 문자열이 하나 이상의 요소를 오버런하고 휴지통에 올릴 수 있습니다.

char infile_name[81]; 
    char outfile_name[81]; 

    printf("Enter the Source file name: \n"); 
    scanf("%80s", infile_name); 
    printf("Enter the Destination file name : \n"); 
    scanf("%80s", outfile_name); 

그리고 argv[1]argv[2]에 대한 참조의 나머지 부분을 조정 : 같은

보십시오 뭔가.

+0

로더는 main()을 실행할 스레드를 만들기 전에 읽기 전용으로 표시된 세그먼트에 명령 줄 인수를 읽을 수 있습니까? –

+0

@MartinJames : no - 논쟁은 쓰기 가능해야만합니다.하지만 여러분이하는 일을 정말로 알지 못한다면, 아마도 그것을 피하는 것이 가장 좋습니다 (예를 들어, 당신이 거기있는 것에 의존 할 수는 없습니다. 인수 문자열). 또한 여기 OP는 인수를 쓰지 않고 포인터 배열을 통해 쓰고 있습니다. 다시 말하지만, 쓰기 가능하지만 문자 데이터는 아닙니다. –

+0

Orite :) ............ –