Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Strcpy更改结构int数组_C_Arrays_Struct_Strcpy - Fatal编程技术网

Strcpy更改结构int数组

Strcpy更改结构int数组,c,arrays,struct,strcpy,C,Arrays,Struct,Strcpy,我在C中有一个结构,我创建了这个结构的数组 typedef struct { int aNum; char name[20]; char sym[10]; char class[30]; float weight; int shell[SHELLS]; } element_t; element_t elements[MAX_ELEMENTS]; 我要求用户输入(1h其他非金属1.0081000),并根据空格将其分隔成一个数组。 我通过调用一个函数

我在C中有一个结构,我创建了这个结构的数组

typedef struct {
    int aNum;
    char name[20];
    char sym[10];
    char class[30];
    float weight;
    int shell[SHELLS];
} element_t;
element_t elements[MAX_ELEMENTS];
我要求用户输入(
1h其他非金属1.0081000
),并根据空格将其分隔成一个数组。 我通过调用一个函数来获取每个用户的输入

for(int i=0;i<N;i++) 
    scan_element(i);
for(int i=0;i0)
对于(int k=5;k结构元素
int shell[shell]

索引范围从0到(SHELLS-1)

所以shell[0]…shell[shell-1]是有效的

以下作业是越界作业:

for(int k=5;k<SHELLS+5;k++)
    elements[i].shell[k] = (int) strtol(array[k], NULL, 10);

for(int k=5;kBTW:shell的定义是什么

以下是问题的根源:

以以下内容开头的代码块:

for(int k=5;k<SHELLS+5;k++) 

并继续放置数据,直到长时间超过外壳的末端[]数组,此结果是未定义的行为,可能/将导致seg故障事件。

出于调试目的,强烈建议结构定义包含
标记
名称,以便调试器(如
gdb
)只需获得结构实例,它将输出每个字段的内容建议,保持逻辑简单,放置字段如果是结构,则直接将内容放入字段中,而不是稍后尝试保存单个字段并分配到结构实例中。请使用调试器并逐步检查代码,这样您就可以看到出了什么问题。@user3629249关于您的第一条注释:您是对的,但如果您继续阅读代码,他将从中复制在数组被覆盖或无效之前将其插入结构中,因此此建议与此无关。第二条注释:这不是循环。第四条注释:这不是可移植反序列化的示例。第五条注释:同样,这不是循环。最后:请在尝试教它之前先学习C。因为我误读了语句:
if(fgets())
,我必须问,当代码退出“if()”代码块(但是对
fgets()
的调用失败)时,代码在做什么?将垃圾设置到元素[I]结构中。实际上,我会将
+5
移动到循环中,如下所示:
for(size\t k=0;k
…但这没关系,从我这里得到+1。
  int iShellCnt = 0;

  for(int k=5;k<SHELLS+5;k++)
      elements[i].shell[iShellCnt++] = (int) strtol(array[k], NULL, 10);
for(int k=5;k<SHELLS+5;k++) 
elements[i].shell[5]