私のコードがクラッシュする理由を理解しようとしています。strcmpによるセグメント化の失敗?
address myContacts[5];
for (i = 0; i < 5 ; i++){
strcpy(myContacts[i].cFirstName, "0");
strcpy(myContacts[i].cLastName,"0");
strcpy(myContacts[i].cTelphone,"0");
}
これは動作します:私はこのような配列の初期化コードで
typedef struct contact {
char cFirstName[10];
char cLastName[10];
char cTelphone[12];
} address ; // end type
:私はこのように見える構造体の配列を持っているので、
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);
をそれ見つけられ、すべてがOKです。ただし、既存の名前がない を検索すると、セグメンテーション違反が発生します。 私はここに欠けている明白なことはありますか?
初期設定が奇妙に見えます。最初に0バイトしか持たないのですか?次に '' "で初期化する必要があります。これは1バイトの文字列であり、' 0'バイトが1つしかありません。それをもっと簡単にする方法は、 'myContacts [i] .cFirstName [0] = '\ 0';' –