私にセグメンテーションフォールトを与えているコードがあります。私はそれをデバッグし、strcpyが実行されたときにエラーが発生しました。コードは、テキストファイルからデータを抽出し、構造体の配列に格納しようとしています。 strcpyを使って、テキストファイルのデータを構造体に格納することを計画しています。なぜこれが起きているのか?strcpyは私にセグメンテーションフォールトを与えます
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int input(char *s, int length);
void main(){
char *tok;
char *buffer;
size_t bufsize = 32;
size_t characters;
FILE *f;
char *file_name;
char line[255];
int currentRoom;
int count = 0;
typedef struct {
char room_n;
char description[100];
char room_north;
char room_south;
char room_west;
char room_east;
} room;
//Creating an array of structs
room record[1000];
while(1){
buffer = (char *)malloc(bufsize * sizeof(char));
if(buffer == NULL){
perror("Unable to allocate buffer");
exit(1);
}
printf("Enter a command: ");
characters = getline(&buffer, &bufsize, stdin);
if(strcmp(buffer,"exit\n") == 0){
printf("Exiting...\n");
exit(1);
}
tok = strtok(buffer, " \n"); // Tokenize input
printf("%s is the token \n", tok);
if (strcmp(tok,"loaddungeon") == 0){
file_name = strtok(NULL, "\n");
printf("file name : %s \n", file_name);
f = fopen(file_name,"r");
while (fgets(line, sizeof(line), f) != NULL)
{
char val1[128];
char val2[128];
char val3[128];
char val4[128];
char val5[128];
char val6[128];
strcpy(val1, strtok(line, "$"));
strcpy(val2, strtok(NULL, "$"));
strcpy(val3, strtok(NULL, " "));
strcpy(val4, strtok(NULL, " "));
strcpy(val5, strtok(NULL, " "));
strcpy(val6, strtok(NULL, " "));
//Segmentation fault error occurs here
strcpy(record[count].room_n, val1);
に変更してください。 'strcpy()'の引数は 'char *'でなければなりません。 'room_n'は' char'です。 – Barmar
その行についてコンパイラ警告を受けているはずです。警告を無視しないでください。 – Barmar
構造体の行をchar room_nからchar * room_nに変更しましたが、警告が出なくなりましたが、seg faultが発生しました。 – user87002