gpt4 book ai didi

c - C 中的二维结构数组 - 如何声明和使用

转载 作者:行者123 更新时间:2023-11-30 15:27:06 27 4
gpt4 key购买 nike

我一直试图找到一个在 C 语言中工作的非常简单的想法,但我什至无法理解语法。
该程序将从命令行接收一些输入,并使用它们来决定创建二维结构数组的大小。

然后,在 for 循环类型的情况下,我希望能够根据用户输入更改特定的无符号字符。因此,首先我构建一个二维结构数组,每个结构都包含一个无符号字符数组以及一个名称,然后我就可以对其进行写入。

命令行参数是三个字符串。 第一个是行数,第二个是列数,第三个是每个结构中无符号字符数组的大小。

#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 之外声明,因此它的范围是全局的,因为堆栈的大小有限,并且结构的二维数组可能会填充它。有人也可以解释一下吗?我如何声明一个其大小在运行时确定的二维数组?

我也打算使用 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));

关于c - C 中的二维结构数组 - 如何声明和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27184907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com