2017-06-03 3 views
0

Ich möchte Array von Zeichenfolgen dynamisch zuweisen, aber ich bin mir nicht sicher, wie ich das tun kann. Also dachte ich darüber nach, eine Struktur zu erstellen und diese Struktur dynamisch zuzuordnen. Also habe ich den Code unten gemacht, aber dieser Code erzeugt Assertionsfehler.Dynamisch Zuordnung Array von Zeichenfolgen

#include <stdio.h> 
#include <stdlib.h> 

typedef struct { 
    char str1[20]; 
    char str2[20]; 
} String; 

int main(void) 
{ 
    String * list; 
    list = (String *)malloc(sizeof(String)); 
    int i = 1; 

    for (; i < 6; i++) { 
     realloc(list, i * sizeof(String)); 
     printf("Input String 1: "); 
     scanf("%s", list[i - 1].str1); 
     printf("Input String 2: "); 
     scanf("%s", list[i - 1].str2); 
    } 

    for (i = 0; i < 5; i++) 
     printf("%s\t%s\n", list[i].str1, list[i].str2); 
    free(list); 
} 

Was ich falsch gemacht haben und wie kann ich dieses Problem beheben?

Dank :)

+2

Sie werfen das Ergebnis von 'Realloc' weg. – BLUEPIXY

Antwort

2

Manpage für realloc sagt:

Die realloc() Funktion gibt einen Zeiger auf die neu Speicher zugewiesen, die in geeigneter Weise für jede Art von variablen ausgerichtet ist, und kann be unterschiedlich von ptr oder NULL, wenn die Anfrage fehlschlägt.

Der neue Zeiger kann von der zu Ihnen unterschiedlich sein realloc weitergegeben, so müssen Sie den Zeiger von realloc zurück sammeln und zu nutzen.

1

Eine Struktur hat immer die gleiche Größe, so dass mit dieser Implementierung Sie immer stecken würde eine Reihe von Größe 2.

Ein Weg, um ein Array von Strings zu erklären (die selbst Arrays von Zeichen) s tun

char **string; 

Wenn Sie ein Array von 20 Strings wollen dann, dass sein würde:

string = malloc(sizeof(char*)*20); 

Structs muss konstante Größe haben, so dass ich glaube nicht, die Compiler lik wird Wenn Sie versuchen, mehr Speicher für eine Struktur zuzuweisen als mit dem, mit dem sie definiert wurde.

Verwandte Themen