首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双动态阵列

问双动态阵列
EN

Stack Overflow用户
提问于 2022-04-08 16:40:51
回答 1查看 82关注 0票数 0

这是我第一次使用动态数组,我真的很困惑。我的原始数组(以下)工作正常。

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    char icdC[4][10];

    for(int i =0;i<4;i++){
      for(int j=0;j<10;j++){
        printf("What are your ICD codes [%d][%d]\n",i,j);
        scanf("%s", &icdC[i][j]);
      }
    }

    return 0;
}

然而,我尝试将这个数组转换为一个双动态数组(如下所示)--它似乎不能正确工作,因为它要么告诉我“信号:分段错误(核心转储)”,要么它就不能运行。

代码语言:javascript
复制
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>

int main()
{

    char** icdC;
    icdC = (char**)malloc(4*10*sizeof(char));


    for(int i=0;i<4;i++){
      for(int j=0;j<10;j++){
        printf("What are your ICD codes [%d][%d]\n",i,j);
        scanf("%s", &icdC[i][j]);
      }
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-08 17:12:22

该问题似乎位于icdC = (char**)malloc(4*10*sizeof(char));中,因为它是对您要创建的第二个数组的错误引用。

在C中,有许多表示2d数组的选项,其中可能创建一个指针数组,每个指针指向特定的行。然后可以使用malloc为每个数组分配内存,这允许您生成一个“指针数组”。

执行工作最有可能是:

代码语言:javascript
复制
char ** icdC;
int r = 4, c = 10;
icdC = (char*) malloc(sizeof(char*) * r);
for (int i = 0; i < r; i++) {
    icdC[i] = malloc(sizeof(char) * c);
}

注意:您也可以像上面所做的那样,在两个循环中完成这个实现。

从这里开始,您可以执行一个嵌套循环来扫描值,就像在代码段中已经做的那样。请记住,现在您可以通过指示相应行和列的索引来访问一个值,如:icdC[row_num][row_column] = ....。

一开始它可能看起来很奇怪,但是在你掌握了这个概念之后,一切都是美好而有趣的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71800554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档