无法从指向数组

时间:2018-02-10 03:47:27

标签: c arrays pointers

我的问题应该相当简单,但我似乎找不到以我所做​​的确切方式完成此事的地方,或者至少我无法适应这一点。

这里的想法是声明一个char指针,然后使用realloc,将它扩展为一个数组,然后我可以指定指向数组起始字符的指针。

从我以前读过的内容中,我应该能够像访问二维数组一样访问它,但是当我尝试下面的代码时,我得到一个错误:函数main中的间接无效我尝试使用printf。

#include <stdio.h>

char *testArr;

unsigned char arr1[5] = {10, 20, 30, 40, 50};
unsigned char arr2[7] = {1, 2, 3, 4, 5, 6, 7};
unsigned char arr3[3] = {50, 150, 200};

int main(void){

realloc(testArr, sizeof(testArr) + sizeof(char *));
realloc(testArr, sizeof(testArr) + sizeof(char *));
testArr[0] = &arr1;
testArr[1] = &arr2;
testArr[2] = &arr3;

printf("%i", *testArr[0][3]);

getchar();

return 0;
}

我尝试过一些事情,包括从将值分配到指针数组中删除它们,但我老实说在这里不知所措。也许拥有更好C经验的人可以帮助我。感谢。

2 个答案:

答案 0 :(得分:2)

mallocrealloc的参数应该是数组乘以中元素的数量乘以每个元素的大小,不应该添加。并且您需要将函数的结果分配给变量。

testarr = realloc(testarr, 3 * sizeof(char*);

由于您希望它是一个指针数组,您需要将其声明为:

char **testarr;

答案 1 :(得分:1)

您想要保留unsigned char* - s。您必须在此设置中使用unsigned char**

unsigned char **testArr;

main()中使用realloc的正确方法是(需要进行此返回值检查)。

char **t = realloc( testArr, sizeof(*t)*3);
if(!t) { perror("realloc"); exit(1);}
testArr = t;

现在您可以简单地执行此操作(之前您所做的是分配char (*)[],即使您尝试在这种情况下,编译器也会因类型不匹配而抱怨)

textArr[0]= arr1;

打印

printf("%i", testArr[0][3]);