Я пытаюсь понять, почему мой код дает сбой. У меня есть массив структур, которые выглядят так:
typedef struct contact {
char cFirstName[10];
char cLastName[10];
char cTelphone[12];
} address ; // end type
В коде я инициализирую массив следующим образом:
address myContacts[5];
for ( i = 0; i < 5 ; i++ ){
strcpy(myContacts[i].cFirstName, "0");
strcpy(myContacts[i].cLastName,"0");
strcpy(myContacts[i].cTelphone,"0");
}
Это работает:
for ( i = 0; strcmp(myContacts[i].cFirstName,"0") != 0 ; i++ ){
printf("\nmyContacts[%d].cFirstName: %s", i, \
myContacts[i].cFirstName );
}// end for
Итак, я распечатываю только те контакты, у которых есть контент.
Однако я не могу понять, почему у меня не работает функция поиска контактов:
void searchContact( address * myContacts, char * name ){
int found = 1;
int i = 0;
for ( i = 1; found != 0 ;i++ ){
found=strcmp(myContacts[i-1].cFirstName, name);
printf(" Name Found %s", myContacts[i-1].cFirstName);
}
} // end of searchContacts
Я вызываю эту функцию так:
printf("\nEnter a name or part of a name to search:\n");
fscanf(stdin, "%s", buffer);
getchar(); // clear the last enter
printf("\nThe line you entered was:\n");
printf("%s\n", buffer);
searchContact( myContacts, buffer );
Если я ищу существующее имя, оно найдено, и все в порядке. Однако поиск несуществующего имени вызывает ошибку сегментации. Есть ли очевидная вещь, которую мне здесь не хватает?
""
, которая представляет собой 1-символьную строку, содержащую всего один0
байт. Чтобы добиться этого намного проще, было бы просто назначитьmyContacts[i].cFirstName[0] = '\0';
- person Jens Gustedt   schedule 18.12.2011