在unix中进行文件复制时出现分段错误

时间:2014-09-18 04:05:27

标签: c unix segmentation-fault file-handling

我写的是使用C语言在unix中将文本从一个文件复制到另一个文件。以下是我的代码的一部分。当我执行程序时,我得到分段错误错误。

任何帮助表示赞赏..

#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
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

将数据读入argv数组非常非常不寻常。你可能不应该考虑这样做。

即使你真的想这样做,以下仍然是错误的:

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

argcv的元素是指针到字符串,因此函数调用会将字符串读入存储指针的内存中。 argv[1] elemetn将无效,并且输入的字符串很可能会超出并删除该字符串后的一个或多个元素。

尝试类似:

    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]