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

Это часть программы, над которой я работаю, она копирует открытый файл и помещает его в массив (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.