[英]segmentation fault with strcmp?
我試圖理解為什么我的代碼崩潰。 我有一個看起來像這樣的結構數組:
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 );
如果我搜索現有名稱,則找到它,一切正常。 但是,搜索不存在的名稱會導致分段錯誤。 我在這里缺少明顯的東西嗎?
探針在這里:
for ( i = 1; found != 0 ;i++ ){
found=strcmp(myContacts[i-1].cFirstName, name);
printf(" Name Found %s", myContacts[i-1].cFirstName);
}
您需要添加類似for ( i = 1; found != 0 && i < num_of_contacts ;i++ )
否則您將退出數組!
是的,這里存在:您循環經過數組的末尾。 您的循環完全不受限制。
您應該將myContacts
上的循環限制為它實際持有的值的數量。
如果搜索找不到任何結果,您將永遠不會結束循環
問題在這里:
for ( i = 1; found != 0 ;i++ ) {
found=strcmp(myContacts[i-1].cFirstName, name);
}
如果找不到name
,則循環將繼續到數組末尾。 您需要在for
循環中添加一個額外的測試,以使其在到達數組末尾而未找到匹配項的情況下終止。
碰巧的是,我不明白為什么您的for循環從1
開始。 這樣做會更自然:
for (i=0; found!=0 && i<5; i++) {
found = strcmp(myContacts[i].cFirstName, name);
}
另外,您found
變量的名稱不好。 可能應將其稱為notfound
因為未找到名稱時為1
,但找到時為0
!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.