我一直试图用一个非常简单的想法在C中工作,但我甚至无法理解语法
该程序将从命令行获取一些输入,并使用它们来决定制作二维结构数组的大小。
然后,在for循环类型的情况下,我希望能够根据用户输入更改特定的unsigned char。首先,我构建一个2D结构数组,每个结构包含一个无符号字符数组和一个名称,然后我就可以写入这些结构。
命令行参数是三个字符串。 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之外声明一个2D数组,因此它的范围是全局的,因为堆栈的大小有限,并且结构的2D数组可能会填充它。也有人可以解释一下吗?我将如何声明一个大小在运行时确定的2D数组?
我打算用C和C来做这个。所以请不要向我提供C ++语法提示。感谢。
答案 0 :(得分:1)
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));