2017-01-23 20 views
-2

Ich habe Code, der mir einen Segmentierungsfehler gibt. Ich debuggte es und und der Fehler trat auf, als der strcpy ausgeführt wurde. Der Code versucht, Daten aus einer Textdatei zu extrahieren und in einem Array von Strukturen zu speichern. Ich plane, strcpy zu verwenden, um die Daten der Textdatei in den Strukturen zu speichern. Irgendeine Idee, warum das vorkommt?strcpy gibt mir Segmentierungsfehler

#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); 
+8

Die Argumente für 'strcpy()' müssen 'char *' sein. 'room_n' ist' char'. – Barmar

+3

Sie sollten eine Compiler-Warnung über diese Zeile erhalten haben. Warnungen nicht ignorieren. – Barmar

+0

Ich änderte die Zeile in der Struktur von char room_n zu char * room_n und keine Warnung mehr erhalten, aber immer noch Segmentfehler. – user87002

Antwort

2

Definition von strcpy() ist:

char *strcpy(char *dest, const char *src) 

wo-

  • dest - Dies ist der Zeiger auf das Zielarray, wo der Inhalt kopiert werden soll.

  • src - Dies ist die Zeichenfolge, die kopiert werden soll.

In Ihrem Code Argumente zu strcpy() übergeben ist char und char *:

strcpy(record[count].room_n, val1); 

Wie in der Struktur definiert:

typedef struct { 
     char room_n; //room_n declared as 'char' 
     char description[100]; 
     char room_north; 
     char room_south; 
     char room_west; 
     char room_east; 
    } room; 

Vorschlag:

Speicher zuweisen für room_n zu zeigen auf. Ändern Sie die Deklaration in char room_n[128];

+0

Macht nichts, ich habe es behoben. Vielen Dank! – user87002

+0

Hallo .. hinzugefügt die Änderungen wie von @Barmar vorgeschlagen .. Danke! –

Verwandte Themen