しばらくの間Cでデータベースを作成してきましたが、昨日、対処できないエラーが発生しました。.txt関数からの読み込みを書き込んでいたときに、プログラムが.txtからデータを読み取った後にいくつかの間違いがあった場合があります。(feそれは「1993-5-13」の代わりに「84683-3478-」でした)私はsthを変更しようとしました、そしてそれからがらくたが起こりました、そして私はその時以来そのようなエラーを受け取りました:
「セグメンテーション違反」->Linuxの場合「コールスタックメモリ」->Windowsの場合
私はあまり変更しなかったので(テキストの置き方)、問題がどこにあるのか本当にわかりませんが、がらくたが起こりました。関数を貼り付けています。手伝ってもらえますか?
void load(struct player *main)
{
int bad;
struct player *act, *prev; // act- actual prev - previous
FILE *plik;
char a;
char text[l]; // l=15;
if((plik = fopen("savings.txt", "r")) == NULL)
{
printf("No savings\n");
return;
}
if(fgets(text, l, plik) == NULL)
{
printf("No saved things\n");
return;
}
printf("These are your savings\n");
do
{
printf("%s", text);
}while(fgets(text, l, plik) != NULL);
fclose(plik);
printf("\nType the name of the file you want to load (with .txt) \n");
do
{
gets(text); // here program stops, no matter if the name is right or not
char *text = (char*) malloc(30);
while (getchar()!='\n')
continue;
strcat(text, ".txt");
printf("%s", *text);
if((plik = fopen(text, "r")) == NULL)
{
printf("There is no such file, type once again \n");
bad=1;
}
else bad=0;
}while(bad);
act = main->next;
while(act != NULL) //cleaning the actual data base
{
prev = act;
act = act->next;
free(prev);
}
nr_of_players = 0;
act = main;
while(fscanf(plik, "%s", act->name)!=0)
{
fscanf(plik, "%s", biez->surname);
fscanf(plik, "%d", &biez->date_y);
fscanf(plik, "%d", &biez->date_m);
fscanf(plik, "%d", &biez->date_d);
fscanf(plik, "%s", biez->position);
fscanf(plik, "%c", &a);
fscanf(plik, "%d", &biez->nr_cart);
fscanf(plik, "%d", &biez->salary);
fscanf(plik, "%d", &biez->matches);
act->id = ++nr_of_players;
act->next = (struct player*) malloc(sizeof(struct player));
prev = act;
act = act->next;
}
free(act);
prev->next = NULL;
fclose(plik);
}