Ошибка сегментации при печати массивов

Это часть программы, над которой я работаю, она копирует открытый файл и помещает его в массив (file1). Тем не менее, я получаю ошибку сегментации, когда пытаюсь распечатать содержимое file1.

Я попытался установить MAX_MAC_ADD на 50 и BIG_NUM на 30000, чтобы он был достаточно большим, чтобы поддерживать файл из fgets().

Файл, который я открываю, состоит из 4 частей, каждая из которых разделена "вкладкой",

например, 1-е, 1-е, 1-е, 1-е, 2-е, 2-е, 2-е, 2-е

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);
}
1 ответ

Вы передаете указатель на массив char в спецификатор формата %s который ожидает указатель на char. Если вы хотите напечатать массив массивов char вам нужно распечатать элементы отдельно, например:

for (int i = 0; i != end; ++i) { printf("file1[%d]='%s'\n", i, file1[i]);
}

licensed under cc by-sa 3.0 with attribution.