2017-06-03 115 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你试图为结构分配更多的内存而不是定义它。