我的问题应该相当简单,但我似乎找不到以我所做的确切方式完成此事的地方,或者至少我无法适应这一点。
这里的想法是声明一个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经验的人可以帮助我。感谢。
答案 0 :(得分:2)
malloc
或realloc
的参数应该是数组乘以中元素的数量乘以每个元素的大小,不应该添加。并且您需要将函数的结果分配给变量。
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]);