次のコードがあります:(質問に関連する部分のみを保持しました)
// Structure
struct first_list {
char firstname[100];
struct first_list * next;
};
struct last_list {
char lastname[100];
struct last_list * next;
};
void verify_name()
{
char firstname[100];
char lastname[100];
struct first_list * curr_first = loaded_first;
struct last_list * curr_last = loaded_last;
/////////// this part was added by me
while( curr_last != NULL )
{
strncpy(lastname, curr_last->lastname, sizeof( lastname ) - 1 );
valid = validate_name(sock,buffer,sizeof(buffer),firstname);
if(valid < 1)
fprintf(stderr, "%s is VALID\n", lastname);
else
fprintf(stderr, "%s is invalid\n", lastname);
curr_last = curr_last->next; //this is used for removing current record
}
printf( "LastName validation complete\n" );
break;
/////////// end of part added by me
while( curr_last != NULL && curr_first != NULL )
{
strncpy(firstname, curr_first->firstname, sizeof( firstname ) - 1 );
strncpy(lastname, curr_last->lastname, sizeof( lastname ) - 1 );
////////////////////////////////
//// irrelevant code (functions)
////////////////////////////////
if( curr_first->next == NULL && curr_last->next != NULL)
{
curr_last = curr_last->next;
curr_first = loaded_first;
}
else
curr_first = curr_first->next;
}
}
そのため、名前と姓を同時に検証する関数の前に、姓を検証する新しい関数を追加しました (プロセス全体を最適化するため)。問題は、break コマンドを削除すると、検証後に last_list が空になるというエラーが発生することです。
現在、次のレコードに移動すると、ループが完了するまで現在のレコードが削除されるため、構造に有効な姓のみを保持するにはどうすればよいですか (NULL) ??