Когда я выполняю команду printf для описания уровня->, программа дает мне ошибку сегментации. Я не знаю почему. Должен ли я использовать malloc для его ремонта? Содержимое (только 1 строка, заканчивающаяся на «\ n») файла sokoban.dat, является «chicago; addie; история начинается здесь; ----- ##### ----------- | -----#@$.#-----------|-----#####----------- "Ошибка сегментации при подключении к структуре
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char *name;
char *description;
char *password;
char *map;
struct level *next;
//char *solution;
} LEVEL;
LEVEL* parse_level(char *line) { //parsing from file into the structure
LEVEL level;
char level_name[50];
char level_password[50];
char level_description[100];
char level_map[200];
int i = 0;
int j = 0;
while (line[i] != ';') { //getting level name
level_name[j] = line[i];
i++;
j++;
}
level_name[j]='\0';
level.name=&level_name[0];
//strcpy(&level.name,level_name);
//printf("%s\n",level.name);
printf("%s\n",level_name);
j = 0;
i++;
while (line[i] != ';') { //getting level password
level_password[j] = line[i];
i++;
j++;
}
level_password[j]='\0';
level.password=&level_password[0];
printf("%s\n",level_password);
j = 0;
i++;
while (line[i] != ';') { //getting level description
level_description[j] = line[i];
i++;
j++;
}
level_description[j]='\0';
level.description=&level_description[0];
printf("%s\n",level_description);
j = 0;
i++;
while (line[i] != '\n') { //getting level map
level_map[j] = line[i];
i++;
j++;
}
level_map[j]='\0';
level.map=&level_map[0];
printf("%s\n",level_map);
j = 0;
level.next=NULL;
LEVEL* levelPointer=&level;
return levelPointer;
}
int main(){
FILE *fp = fopen("sokoban.dat", "r");
if(fp == NULL){
printf("No such file\n");
return 1;
}
char line[500];
//strcpy(line,"");
char c;
int i=0;
while((c = fgetc(fp)) != '\n'){ //reading from file 1 by 1 character
line[i]=c;
i++;
}
printf("%s\n",line);
LEVEL* level;
level=parse_level(line);
//printf("%s\n",level->description); **//!!! this is where error occur**
printf("%s\n",level->map);
return 0;
}
Используйте отладчик, такой как gdb, чтобы найти, где именно находится ваш код, ваша проблема, или комментарии частей вашей программы, чтобы сузить недостатки. Как бы то ни было, другие пользователи StackOverflow вряд ли будут очень много работать, чтобы решить вашу проблему. –
проблематичный - это пятая строка снизу (это когда происходит ошибка). Я использую NetBeans для отладки, а для переменной level-> description он дает мне адрес: 0x52 <Адрес 0x52 вне границ>. – Dounchan
ОК, так есть там терминатор мулл? –