Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 访问和分配“中结构的每个部分中的值”;数组";结构?_C_Pointers_Struct - Fatal编程技术网

C 访问和分配“中结构的每个部分中的值”;数组";结构?

C 访问和分配“中结构的每个部分中的值”;数组";结构?,c,pointers,struct,C,Pointers,Struct,所以我有一个分配,分配足够的内存来存储一组具有不同值的结构。我只能给马洛克打一次电话 A的结构如下所示: typedef struct ObjectTag Object; struct ObjectTag { char *stringA[20]; char *stringB[30]; char *stringC[5]; unsigned short num; }; 为了我的malloc电话我正在做 Object *myObjArray; myObjArray=

所以我有一个分配,分配足够的内存来存储一组具有不同值的结构。我只能给马洛克打一次电话

A的结构如下所示:

typedef struct ObjectTag Object;
struct ObjectTag
{
    char *stringA[20];
    char *stringB[30];
    char *stringC[5];
    unsigned short num;
};
为了我的malloc电话我正在做

Object *myObjArray;
myObjArray= (Object*)malloc(numObjects * sizeof(Object));
fscanf(inFile, " %s", (*Object)[i].stringA);
fscanf(inFile, " %s", (*Object)[i].stringB);
fscanf(inFile, " %s", (*Object)[i].stringC);
fscanf(inFile, " %hu", (*Object)[i].num);
我试图从填充中获取信息,并将其放入我的结构中。我就是这样做的

Object *myObjArray;
myObjArray= (Object*)malloc(numObjects * sizeof(Object));
fscanf(inFile, " %s", (*Object)[i].stringA);
fscanf(inFile, " %s", (*Object)[i].stringB);
fscanf(inFile, " %s", (*Object)[i].stringC);
fscanf(inFile, " %hu", (*Object)[i].num);
如此循环

但是当我试图编译时,我得到了这个错误

format '%s' expects argument of type 'char *', but argument 3 has type 'char **'
这也是最后一个

format '%hu' expects argument of type 'short unsigned int *', but argument 3 has type 'int'
我不知道我做错了什么

可能相关的注意事项:

  • 内嵌具有预期的格式
  • 正如malloc调用中的numObjects所指出的,我已经计算了需要多少个结构

char*stringA[20]
不是由20(或19)个字符组成的字符串。它是一个由20个未指定长度的字符串组成的数组。你确定这就是你想要的吗?

字符*stringA[20]不是由20(或19)个字符组成的字符串。它是一个由20个未指定长度的字符串组成的数组。你确定这就是你想要的吗?

哇,我觉得很傻,你知道为什么第二个错误还在发生吗?%hu一个。因为要输入一个数字(无论是int、short、long、float、double等),你应该把它的地址给fscanf,比如
intfoo;fscanf(“%d”和&foo)这是因为没有函数可以更改其参数.Doh的值,这很有意义。很抱歉为这个蹩脚的问题烦恼。哇,我觉得自己很笨,你知道为什么第二个错误还在发生吗?%hu一个。因为要输入一个数字(无论是int、short、long、float、double等),你应该把它的地址给fscanf,比如
intfoo;fscanf(“%d”和&foo)这是因为没有函数可以更改其参数.Doh的值,这很有意义。很抱歉为这个蹩脚的问题烦恼。