[英]how to use a 2D array in C
我是C
新手,正在嘗試創建2D字符數組。 其背后的邏輯是從用戶獲取未知數量的字符串輸入,並能夠獲取這些字符串(每個字符串以":"
結尾),但是當我嘗試調試時,我得到了:
<Error reading characters of string>
這是代碼:
int main()
{
int j = 0, rows = 50;
int i=0, lines = 50;
char **names;
names = (char**)malloc(lines*sizeof(char*));
if (i >= lines)
{
names = (char**)realloc(names, 10 * sizeof(char*));
lines = lines * 10;
}
for (j ; names[i][j] != ':'; j++)
{
*names = (char*)malloc(rows * sizeof(char));
if (j >= rows)
{
*names = (char*)realloc(names, 10 * sizeof(char));
rows = rows * 10;
}
scanf("%c", &names[i][j]);
}
i++;
return 0;
}
for (j ; names[i][j] != ':'; j++)
在此循環中,您的測試條件將測試names
':'
。 已經為names
分配了內存,但其中不包含任何內容( 它將與?進行比較 )。
使用do-while
循環,以便在讀取names
字符之前執行循環。
同樣,您為char *
分配了內存,但是沒有正確地為這些指針分配內存。 如果沒有正確分配內存,您將嘗試在字符指向的位置存儲字符。 這會引起問題。
將內存分配給每個char *
,然后輸入。
這樣的事情可以做到-
do{
names[i] =malloc(rows * sizeof(char));
if(names!=NULL){
if (j >= rows)
{
*names = (char*)realloc(names, 10 * sizeof(char));
rows = rows * 10;
}
scanf("%c", &names[i][j]);
j++;
i++;
}
}while(names[i][j]!=':')'
注意 -
1.您應該free
分配的內存。 你首先if
不會執行( 無法理解它的使用 )。
2.檢查malloc
返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.