0

私のコードは問題なくコンパイルされますが、実行するとバスエラーが発生します: 10

void backupf(char *namelist, char *dirname)
{  
char    *in_filename;
char    *out_filename;
char    line[MAXPATHLEN];

FILE    *filenames = fopen(namelist, "r");

if(filenames == NULL) 
    {
        fprintf(stderr, "Cannot Open File\n");
        exit(EXIT_FAILURE);
    }
while( fgets(line, sizeof line, filenames) != NULL )
    {
    sprintf(in_filename, "./%s\n", line);
    sprintf(out_filename, "%s/%s\n", dirname, line);
    }
    backup(dirname, in_filename, out_filename);
fclose(filenames);
}

ファイル名のリストを含むテキスト ファイル引数を受け取り、その情報を使用して、私が作成したバックアップ関数を使用してバックアップ ディレクトリにバックアップすることになっています。

4

1 に答える 1

1

ファイル名にスペースを割り当てません。あなたがすべき。あなたは不確定な記憶を上書きしています。これはおそらくうまくいくでしょう:

void backupf(char *namelist, char *dirname)
{  
    char  in_filename[MAXPATHLEN];
    char  out_filename[MAXPATHLEN];
    char  line[MAXPATHLEN]; 
    FILE *filenames = fopen(namelist, "r");

    if (filenames == NULL) 
    {
        fprintf(stderr, "Cannot Open File\n");
        exit(EXIT_FAILURE);
    }
    while (fgets(line, sizeof(line), filenames) != NULL)
    {
        snprintf(in_filename, sizeof(in_filename)"./%s\n", line);
        snprintf(out_filename, sizeof(out_filename), "%s/%s\n", dirname, line);
        backup(dirname, in_filename, out_filename);
    }
    fclose(filenames);
}
于 2013-11-02T02:59:50.697 に答える