繁体   English   中英

如何在C中为2D数组中的每个元素动态分配内存

[英]How to dynamically allocate memory for every element in 2D array in C

如何为2D数组中的每个元素动态分配内存? 例如,我有一个地址,其中包括街道名称(1.column)和街道编号(2.column),例如St.Paul 87/45。 而且我需要为它们动态分配内存。

int main()
{
   int c = 1, r = 1; //c-column, r-row
   char st_name[] = "St.Paul";
   char st_number[] = "87/45";
   char *arr = (char *)malloc(c*r*sizeof(char));
   c = 0; 
   r = 0;
   *arr[r][c++] = (char *)malloc((strlen(st_name)) * sizeof(char));
   *arr[r][c] = (char *)malloc((strlen(st_number)) * sizeof(char));
   return 0;
}

当然,这是行不通的。

谢谢。

您需要一个矩阵,但是每个矩阵项都是一个c字符串,因此是一个数组。

您可以使用3个开始指针来做到这一点,例如:

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

int main(void)
{
   int c = 1, r = 1; //c-column, r-row
   char st_name[] = "St.Paul";
   char st_number[] = "87/45";
   char ***arr = malloc(r*sizeof(char *));
   c = 0;
   r = 0;
   if (arr != NULL)
   {
       arr[r] = malloc(c*sizeof(char *));

       if (arr[r] != NULL)
       {
           arr[r][c] = malloc(strlen(st_name)+1);
           if (arr[r][c] != NULL)
           {
               c++
               arr[r][c]   = malloc(strlen(st_number)+1);
               if (arr[r][c] != NULL)
               {        
                   sprintf( arr[0][0], st_name);
                   sprintf( arr[0][1], st_number);

                   printf ("arr[0][0] = %s\n", arr[0][0]);
                   printf ("arr[0][1] = %s\n", arr[0][1]);
               }
           }
       }
   }

   return 0;
}

或者,您也可以使用定义数组中每个项目的结构来做到这一点,例如

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

struct item
{
    char *name;
    char *number;
};

int main(void)
{
   char st_name[] = "St.Paul";
   char st_number[] = "87/45";
   int r = 1;

   struct item  *arr = malloc(r*sizeof(struct item));

   if (arr != NULL)
   {
       arr[0].name = malloc(strlen(st_name)+1);
       arr[0].number  = malloc(strlen(st_number)+1);

       if ((arr[0].name != NULL) && (arr[0].number != NULL))
       {
           sprintf( arr[0].name, st_name);
           sprintf( arr[0].number, st_number);

           printf ("arr[0][0] = %s\n", arr[0].name);
           printf ("arr[0][1] = %s\n", arr[0].number);

           free(arr[0].name);
           free(arr[0].number);
       }

       free(arr);
   }

   return 0;
}

暂无
暂无

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

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