【发布时间】:2011-12-17 20:51:28
【问题描述】:
我试图了解我的代码崩溃的原因。我有一个结构数组,如下所示:
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 );
如果我搜索现有名称,它会被找到,并且一切正常。然而,寻找 不存在的名称会导致分段错误。 我在这里有什么明显的遗漏吗?
【问题讨论】:
-
你的初始化看起来很奇怪。你的意思是只有一个 0 字节作为开始?然后您应该使用
""进行初始化,这是一个只有一个0字节的1 字符字符串。一种更容易实现的方法是分配myContacts[i].cFirstName[0] = '\0';