2017-06-03 89 views
0

我想動態地分配字符串數組,但我不知道我該如何做到這一點。所以我想構建一個結構並動態分配這個結構。所以我做了下面的代碼,但是這段代碼創建斷言失敗。動態分配字符串數組

#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); 
} 

我做了什麼錯,我該如何解決這個問題?

謝謝:)

+2

你扔掉'realloc'的結果。 – BLUEPIXY

回答

2

realloc手冊頁說:

的realloc()的函數返回一個指向新分配 內存,專爲適應任何類型的變量取向,並可與ptr不同,爲 ;如果請求失敗,則爲NULL。

新指針可以從你傳遞給realloc的不同,所以你需要收集和使用由realloc返回的指針。

1

的結構總是具有相同的尺寸,以便與該實施你總是與具有大小的數組被卡住2.

甲方式來聲明一個字符串數組(它們本身的字符陣列)類做

char **string; 

如果你想20個字符串數組那麼這會是:

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

的Structs必須有固定的大小,所以我不認爲編譯器將LIK你試圖爲結構分配更多的內存而不是定義它。