C 从指向每个结构的指针数组中获取输入并将其分配给结构。

C 从指向每个结构的指针数组中获取输入并将其分配给结构。,c,pointers,struct,fill,C,Pointers,Struct,Fill,我试图用指针数组将输入分配给多个结构,指针指向每个分配的结构。我一直在尝试填充一个结构并打印它,但不断出现错误,无法找到原因。有什么想法吗 谢谢你的帮助 /* Structure declaration */ struct personCatalog { char name[50]; char address[50]; char cityState[50]; char zipCode[7]; } ; //function to fill structures void ge

我试图用指针数组将输入分配给多个结构,指针指向每个分配的结构。我一直在尝试填充一个结构并打印它,但不断出现错误,无法找到原因。有什么想法吗

谢谢你的帮助

/* Structure declaration */

struct personCatalog {
  char name[50];
  char address[50];
  char cityState[50];
  char zipCode[7];
} ;

//function to fill structures

void getPerson (struct personCatalog *ArrayOfPointers[]);

   int main(int argc, const char * argv[])
 {

struct personCatalog *pointerArray[51]; 

getPerson(pointerArray);

 }

void getPerson (struct personCatalog *ArrayOfPointers[]){

struct personCatalog *tempPointer;

char stringCollector[512];

int maxNumberOfPeople = 51;
int num = 0;

while ((gets(stringCollector) != NULL) && (num < maxNumberOfPeople)) {

    tempPointer = (struct personCatalog *) malloc(sizeof(struct personCatalog));
    strcpy(tempPointer->name, stringCollector);
    gets(tempPointer->address);
    gets(tempPointer->cityState);
    gets(tempPointer->zipCode);

    ArrayOfPointers[num] = tempPointer;

    num++;

    printf("%s", ArrayOfPointers[num]->name);
    printf("%s", ArrayOfPointers[num]->address);
    printf("%s", ArrayOfPointers[num]->cityState);
    printf("%s", ArrayOfPointers[num]->zipCode);

}

 ArrayOfPointers[num] = '\0';
}
/*结构声明*/
结构personCatalog{
字符名[50];
字符地址[50];
半胱氨酸盐[50];
char-zipCode[7];
} ;
//函数填充结构
void getPerson(struct personCatalog*ArrayOfPointers[]);
int main(int argc,const char*argv[]
{
struct personCatalog*pointerArray[51];
getPerson(指针阵列);
}
void getPerson(结构personCatalog*数组指针[]){
结构personCatalog*临时指针;
字符字符串收集器[512];
int maxNumberOfPeople=51;
int num=0;
while((gets(stringCollector)!=NULL)&&(numname,stringCollector);
获取(临时指针->地址);
获取(tempPointer->cityState);
获取(tempPointer->zipCode);
ArrayOfPointers[num]=临时指针;
num++;
printf(“%s”,数组指针[num]->name);
printf(“%s”,数组指针[num]->地址);
printf(“%s”,数组指针[num]->cityState);
printf(“%s”,数组指针[num]->zipCode);
}
数组指针[num]='\0';
}

稍微更正一下,尝试一下,但还有更多的工作要做

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Structure declaration */

struct personCatalog {
  char name[50];
  char address[50];
  char cityState[50];
  char zipCode[7];
} ;
const int maxNumberOfPeople = 3; // was 51;

//function to fill structures

void getPerson (struct personCatalog *ArrayOfPointers[]);

int main(int argc, const char * argv[]) {

  struct personCatalog *pointerArray[maxNumberOfPeople];

  getPerson(pointerArray);

}

void getPerson (struct personCatalog *ArrayOfPointers[]){
  struct personCatalog *tempPointer;
  char stringCollector[512];
  int num = 0;

  while ((num < maxNumberOfPeople) && (gets(stringCollector) != 0) ) {

    tempPointer = (struct personCatalog *) malloc(sizeof(struct personCatalog));
    strcpy(tempPointer->name, stringCollector);
    gets(tempPointer->address);
    gets(tempPointer->cityState);
    gets(tempPointer->zipCode);

    ArrayOfPointers[num] = tempPointer;


    printf("name      %s\n", ArrayOfPointers[num]->name);
    printf("address   %s\n", ArrayOfPointers[num]->address);
    printf("cityState %s\n", ArrayOfPointers[num]->cityState);
    printf("zipCode   %s\n", ArrayOfPointers[num]->zipCode);

    num++;
  }
  //ArrayOfPointers[num] = '\0'; this crashed at end of array
}
#包括
#包括
#包括
/*结构声明*/
结构personCatalog{
字符名[50];
字符地址[50];
半胱氨酸盐[50];
char-zipCode[7];
} ;
const int maxNumberOfPeople=3;//51人;
//函数填充结构
void getPerson(struct personCatalog*ArrayOfPointers[]);
int main(int argc,const char*argv[]{
struct personCatalog*pointerArray[maxNumberOfPeople];
getPerson(指针阵列);
}
void getPerson(结构personCatalog*数组指针[]){
结构personCatalog*临时指针;
字符字符串收集器[512];
int num=0;
而((numname,stringCollector);
获取(临时指针->地址);
获取(tempPointer->cityState);
获取(tempPointer->zipCode);
ArrayOfPointers[num]=临时指针;
printf(“名称%s\n”,数组指针[num]->name);
printf(“地址%s\n”,数组指针[num]->地址);
printf(“cityState%s\n”,ArrayOfPointers[num]->cityState);
printf(“zipCode%s\n”,ArrayOfPointers[num]->zipCode);
num++;
}
//ArrayOfPointers[num]='\0';这在数组末尾崩溃
}

有趣的是,该代码对我来说非常有用,并添加了必要的内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
在最坏的情况下,您将在
ArrayOfPointers
之后编写(具体到
ArrayOfPointers[51]

使用宏并决定是否要NULL终止数组:

#define MAXPEOPLE 50
struct personCatalog *pointerArray[MAXPEOPLE+1]; /* +1 for the NULL terminator */
if (num < MAXPEOPLE)) ...
#定义MAXPEOPLE 50
struct personCatalog*pointerArray[MAXPEOPLE+1];/*+1表示空终止符*/
如果(num
您会遇到哪些错误?请发布它们。为什么要为函数发送不可用的指针,这些指针没有任何可使用的东西。错误位于'ArrayOfPointers[num]=tempPointer;'错误显示为“线程1:EXC\u BAD\u访问(代码=1,地址=0x0)。”num是本地的,您可以将其本地设置为外部变量。num超出范围,谢谢。有没有类似的方法不用全局变量或常量变量就可以做到这一点?哈哈。你可以将maxNumberOfPeople作为参数传递给getPerson,只需添加一个int作为参数。太棒了,我成功了。谢谢你的帮助,我很感激。
#define MAXPEOPLE 50
struct personCatalog *pointerArray[MAXPEOPLE+1]; /* +1 for the NULL terminator */
if (num < MAXPEOPLE)) ...