簡體   English   中英

無法讀取指向數組的指針數組

[英]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經驗的人可以幫助我。 謝謝。

mallocrealloc的參數應該是數組中元素的數量乘以每個元素的大小,你不應該添加。 並且您需要將函數的結果分配給變量。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM