如何为多个阵列动态分配内存?

时间:2018-12-06 00:21:20

标签: c

因此,我正在编写一个程序,该程序将用户定义数量的数组存储到用户定义大小的数组中,目前,我正在尝试打印输入的每个字符串,但不知道如何将先前的字符串存储到其他位置。例如,如果用户需要4个字符串,那么我只能打印出最后一个。 我的第一个想法是为字符串创建另一个数组,该数组随着我将用户输入的字符串放入其中而增长,但在如何实现这一点以及将字符串分离为更大的字符串中迷失了。 如何在末尾重复printf语句,以便打印出所有输入的字符串,而不仅仅是最后一个? 如何为给出的字符串创建空间,而不覆盖它们? 在输入下一个字符串之前,如何将字符串发送到内存中的其他位置,以及如何访问它?  这是到目前为止的代码 (正在进行的工作)

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


int main(int argc,char *argv[]){

    int i, length, amt;
    char *ptr, *thetotalstring;
    i=0;

    printf("enter string amount: ");
    scanf("%d",&amt);

    for(;i<amt;i++){
        printf("Enter the length of the string: ");
        scanf("%d", &length);  //length is defined
        ptr = malloc(length/2*sizeof(char));  //allocate the space
        printf("Please enter string %d: ", (i+1));  
        scanf("%s", ptr);   //get the string
        thetotalstring = realloc(ptr, amt*length*sizeof(char));
    }  

    //allocate more 
    //space in a bigger string to hold other strings?? 
    for(i=0;i<amt;i++){
        printf("%s", thetotalstring);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

您可以使用指针吗?

int *arrop[3]; 

示例

int *arrop[3];
    int a = 10, b = 20, c = 50, i;

    arrop[0] = &a;
    arrop[1] = &b;
    arrop[2] = &c;

    for(i = 0; i < 3; i++)
    {
        printf("Current = %d\t Value = %d\n", arrop[i], *arrop[i]);
    }

答案 1 :(得分:0)

最简单的方法是存储一个字符串数组,而不是尝试将它们全部放入一个大的字符串缓冲区中。 首先,您要分配数组:

char **str_array = malloc(amt * sizeof(char*));

然后,您将在循环内分配并填充数组的每个元素:

str_array[i] = malloc(length * sizeof(char));
fgets(str_array[i], length, stdin); //safer than scanf

最后,您将在最后一个循环中打印数组的每个元素:

printf("%s", str_array[i]);