繁体   English   中英

动态分配字符串数组

[英]Dynamically allocating array of strings

我想动态分配字符串数组,但是我不确定如何做到这一点。 因此,我想到了一个结构并动态分配该结构。 因此,我在下面编写了代码,但是此代码创建了断言失败。

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

我做错了什么,该如何解决呢?

谢谢 :)

重新realloc的手册页显示:

realloc()函数返回一个指向新分配的内存的指针,该指针适合于任何类型的变量,并且可能与ptr不同,如果请求失败,则为NULL。

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

结构始终具有相同的大小,因此使用此实现时,您将始终拥有大小为2的数组。

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

char **string;

如果您想要20个字符串组成的数组,则为:

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

结构必须具有恒定的大小,因此我不认为编译器会喜欢您尝试为结构分配比其定义的更多的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM