如果我有一个数组,例如:
char array[10][20];
然后它是一个包含10个字符串的数组,每个字符串的长度为20.如果我使用malloc创建一个类似的数组:
char **dyn_array = (char **) malloc(10 * sizeof(char *));
然后我如何访问会员?例如,如果我有一个循环:
int limit, count=0;
printf("Enter the limit (max 10): ");
scanf("%d", &limit);
fflush(stdin);
while(count < limit)
{
int index = 0;
printf("\nEnter characters: ");
fgets(array[count], sizeof(array[count]), stdin);
fflush(stdin);
printf("\nYou typed: ");
while(array[count][index] != '\n' &&
array[count][index] != '\0')
{
printf("%c", array[count][index]);
index += 1;
}
count += 1;
}
我可以在每个位置用dyn_array替换数组并使它们相同吗?我需要做出哪些改变?我知道这两种数组的工作方式是相似的,但我无法绕过它。
答案 0 :(得分:3)
char array[10][20];
然后它是一个包含10个字符串的数组,每个字符串长度为20。
不,不是。它是一个由10个阵列组成的阵列,每个阵列有20个字符。提醒一个c-string只是一个由NUL
个终止的连续字符序列。 char数组可能包含c字符串,但不是必需的。
如果我使用malloc创建一个类似的数组:
char **dyn_array = (char **) malloc(10 * sizeof(char *));
不,它不相似,因为你刚刚创建了一个包含10个指向字符的数组的数组(为此你将地址存储到指针中)。但是这些指针(数组中的指针)并没有初始化为任何东西。要获得类似的东西,你可以写:
for (int i=0; i<10; i++)
dyn_array[i] = malloc(20*sizeof(char));
因此,在这两种情况下,您都可以撰写array[count][index]
和dyn_array[count][index]
。
但是你不能写fget(dyn_array[count],sizeof(dyn_array[count],stdin);
,因为在这种情况下dyn_array[count]
不是数组而是指针。提醒数组可以衰减到指针,但指针不是数组。
关于指针与数组有几个问题。读取。