动态分配字符串数组

时间:2017-06-03 04:14:49

标签: c arrays string malloc

我想动态分配字符串数组,但我不知道如何才能做到这一点。所以我想到制作一个结构并动态分配该结构。所以我在下面编写了代码,但是这段代码会导致断言失败。

#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 个答案:

答案 0 :(得分:2)

realloc的手册页说:

  

realloc()函数返回指向新分配的指针   记忆,适合任何类型的变量,可能是   与ptr不同,如果请求失败,则为NULL。

新指针可能与您传递给realloc的指针不同,因此您需要收集并使用realloc返回的指针。

答案 1 :(得分:1)

一个结构总是具有相同的大小,所以在这个实现中,你总是会遇到一个大小为2的数组。

一种声明字符串数组(它们本身是字符数组)的方法

char **string;

如果你想要一个包含20个字符串的数组,那么它就是:

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

结构必须具有恒定的大小,所以我不认为编译器会像你试图为结构分配更多的内存而不是它的定义。