簡體   English   中英

如何在C中使用2D數組

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

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