1

これは私が取り組んでいるプログラムの一部です。開いているファイルをコピーしてから配列に入れています(file1)。ただし、のコンテンツを印刷しようとすると、セグメンテーション違反が発生しfile1ます。

MAX_MAC_ADD を 50 に、BIG_NUM を 30000 に設定して、ファイルを維持するのに十分な大きさにしようとしましたfgets()

開いているファイルには 4 つの部分があり、それぞれが「タブ」で区切られています

例: 1one 1two 1three 1four 2one 2two 2three 2four

char    file1[MAX_MAC_ADD][BIG_NUM];
int         num_MAC = 0;

char    *Programe_Name;

int saperate_fields1(char line[])
{
int i = 0;
int f = 0;

while(line[i] != '\0' && line[i] != '\n')
{
    int c = 0;

    while(line[i] != '\t' && line[i] != '\0' && line[i] != '\n')
    {
        file1[f][c] = line[i];
        ++c;
        ++i;
    }
    file1[f][c] = '\0';

    ++f;
    if(f == (MAX_MAC_ADD-1))
    {
        break;
    }
    ++i;
}
return f,i;
}

void read_file1(char filename[])
{
//OPEN FOR READING
FILE    *fp = fopen(filename,"r");

if(fp == NULL)
{
    printf("%s: cannot open '%s'\n", Programe_Name, filename);
    exit(EXIT_FAILURE);
}
char    line[BUFSIZ];
while(fgets(line, sizeof line, fp) != NULL)
{
    saperate_fields1(line);     //SAPERATE INTO FIELDS
    num_MAC = num_MAC + 1;
    printf("%d times\n", num_MAC);
}
fclose(fp);
printf("line is:\n%s\n", line); //TO CHECK WHERE DO THE PROGRAM STOP READING
printf("file1 is:\n%s\n", file1);
}
4

1 に答える 1