簡體   English   中英

C語言中的二維結構數組-如何聲明和使用

[英]Two Dimensional Array of Structs in C - how to declare and use

我一直試圖獲得一個非常簡單的想法來在C語言中工作,但我什至無法降低語法。
該程序將從命令行接收一些輸入,並使用它們來決定制作二維結構數組的大小。

然后,在for循環類型的情況下,我希望能夠根據用戶輸入更改特定的未簽名char。 因此,我首先構建一個二維結構數組,每個結構都包含一個無符號字符數組以及一個名稱,然后我就可以對它們進行寫入。

命令行參數是三個字符串。 First one is number of rows, second one is number of columns, third one is size of unsigned char array within each struct.

#include<stdio.h>
#include<stdbool.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
    typedef struct {
    unsigned char* Data;
    char* name;
    } myStruct;

    myStruct* myArr[][];

    int main(int argc, char *argv[])
    {
       int y = atoi(argv[0]);
       int x = atoi(argv[1]);
       int z = atoi(argv[2]);
       myStruct* myArr[x][y];

      for (int i = 0; i < x; i++)
     {
         for(int j = 0; j < y; j++)
        {
           myArr[i][j]=(myStruct*) malloc(sizeof(myStruct));
           myArr[i][j].Data=(unsigned char*)  malloc(sizeof(unsigned char)*z);  
           myArr[i][j].name = (char*) malloc(sizeof(char)*64);
        }
     }

     //part II - change some entry of myArr based on input from user
     //assume input has been taken in correctly
     int h = 5;//5th row in myArr
     int k = 7; // 7th column in myArr
     int p = 9; //9th unsigned char in myArr[h][k].Data
     unsigned char u = 241;//value to be written
     char* newName = "bob";
     myArr[h][k].Data[p]=u;
     myArr[h][k].name=newName;

     return 0;
    }

此代碼不起作用。 實際上,它不會編譯。 有人可以幫我嗎? 我只是試圖將指針理解為從Java到C過渡的一種方式。這是我可以非常輕松地在Java中完成的事情,我也希望能夠在C中實現。 我聽說必須在main外部聲明2 D數組,因此它在作用域內是全局的,因為堆棧的大小受到限制,而結構的2D數組可能會填充它。 有人也可以解釋嗎? 以及如何聲明一個2D數組,其大小在運行時確定?

我打算為此使用C並且僅使用C。 因此,請不要向我提供C ++語法提示。 謝謝。

 myArr[h][k].Data[p]=u;
 myArr[h][k].name=newName;

應該

 myArr[h][k]->Data[p]=u;
 myArr[h][k]->name=newName;

因為它們是指針。 在您的循環中發生相同的錯誤。

myStruct* myArr[][];

該行無效且無意義,因為您在main()中重新定義了它。

如果要分配動態數組,可以使用:

myStruct **myArr = malloc(x * y * sizeof(**myArr));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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