#include <stdio.h>
void main ()
{
FILE *fp;
char ch,str[10240],arr[10800][3];
int i,j,k;
if((fp=fopen("structure_backup.dat","r"))==NULL)
{
printf("\nCannot open file!!!");
getchar();
exit(1);
}
ch = ' ';
i = 0,j=0,k=0;
while(ch != EOF)
{
ch = fgetc(fp);
while(ch !='\n')
{
while(ch != '\t') // <=== HERE is where you go off the rails, never escape this whileloop
{
str[k]=ch;//<==== NOW YOU STORE ch in str[k], never escaping the while loop
k++;//<=== k goes to MAX_SIZE here, eventually causing the write above to be out of bounds. str[9999999999] is an invalid index for example.
}
arr[i][j]=str;
k=0;
j++;
}
arr[i][j]=str;
k=0;
j=0;
i++;
}
fclose(fp);
}
Я скопировал ваш источник OP и разместил комментарии там, где произошла ошибка.Вам нужно либо повторно получить ch во вложенном цикле while, либо сделать вложенный цикл while оператором if.В любом случае, ваш segfault:)