这是我第一次使用动态数组,我真的很困惑。我的原始数组(以下)工作正常。
#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;
}然而,我尝试将这个数组转换为一个双动态数组(如下所示)--它似乎不能正确工作,因为它要么告诉我“信号:分段错误(核心转储)”,要么它就不能运行。
#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;
}发布于 2022-04-08 17:12:22
该问题似乎位于icdC = (char**)malloc(4*10*sizeof(char));中,因为它是对您要创建的第二个数组的错误引用。
在C中,有许多表示2d数组的选项,其中可能创建一个指针数组,每个指针指向特定的行。然后可以使用malloc为每个数组分配内存,这允许您生成一个“指针数组”。
执行工作最有可能是:
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] = ....。
一开始它可能看起来很奇怪,但是在你掌握了这个概念之后,一切都是美好而有趣的!
https://stackoverflow.com/questions/71800554
复制相似问题