[英]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.