【发布时间】:2013-01-07 14:48:40
【问题描述】:
我有以下代码: (我只保留了我的问题的相关部分)
// 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)??
【问题讨论】:
-
警告:
strncpy不安全。使用后需要空终止,因为它本身不会这样做。 -
我只发布了有关结构的问题的相关代码。
-
您仍然应该听取一位绅士的建议,这就是他将其作为评论发布的原因,因为它与您的问题无关