[英]Can't read from an array of pointers that point to arrays
我的问题应该相当简单,但我似乎无法找到一个以我所做的确切方式完成此事的地方,或者至少我无法适应这一点。
这里的想法是声明一个char指针,然后使用realloc,将其展开为一个数组,然后我可以指定指向数组起始字符的指针。
从我以前读过的内容来看,我应该能够像访问二维数组那样访问它,但是当我尝试下面的代码时,我得到一个错误:当我尝试使用printf时,函数main中的间接无效。
#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;
}
我已经尝试了一些方法,包括删除&将s值分配到指针数组中,但我老实说这里不知所措。 也许拥有更好C经验的人可以帮助我。 谢谢。
malloc
或realloc
的参数应该是数组中元素的数量乘以每个元素的大小,你不应该添加。 并且您需要将函数的结果分配给变量。
testarr = realloc(testarr, 3 * sizeof(char*);
由于您希望它是一个指针数组,您需要将其声明为:
char **testarr;
你想要持有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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.