我有一个用c++实现的链表,我想在插入数据值后立即搜索它。user.However提示要搜索的记录,搜索功能没有正常工作,一直返回No match found。可能的问题是什么?
struct node{
char name[60];
char admission[10];
char grade;
node *next;
};
node* search(node* head){
node *temp=head;
char name[60];
cout << "Enter Student to search :";
cin.ignore(10000, '\n');
cin.getline(name, 60);
cout << name;
while (temp!=NULL){
if(strcmp(temp->name, name)==0){
cout << "Match found";
return temp;
}
temp = temp->next;
}
cout << "No match found";
return NULL;
}
int main(){
node *head = NULL;
char name[60];
char admission[10];
char grade;
node *temp;
temp = (node*)malloc(sizeof(node));
int i=0;
while(i<2){
cout << "Enter students name: ";
cin.ignore(10000, '\n');
cin.getline(name, 60);
cout << "Enter student's admission number: ";
cin.getline(admission, 10);
cout << "Enter student's grade :";
cin >> grade;
strcpy(temp->name, name);
strcpy(temp->admission,admission);
temp->grade = grade;
head = temp;
i++;
}
search(head);
return 0;
}
发布于 2013-07-02 15:01:32
您的插入代码确保您的列表只有一个节点。该节点的数据将被覆盖以存储最后输入的数据。这就是为什么你的搜索操作会失败。
您的插入需要做的是:
next
指针设置为NULL!这样做可以避免在你最意想不到的时候调用未定义的行为。temp
,它指向头节点。不为此节点分配内存。这样做= memory leak.next
NULL.temp = temp->next
).temp
移动到步骤5中分配的节点(如果需要更多节点,请通过temp = temp->next
).请确保释放为每个节点分配的内存,因为如果将此代码用作更大的代码库中的模块,则会出现内存泄漏。
此外,正如其他答案所指出的那样,您的strcpy
使用是错误的。基本上,语法是:
strcpy(destination, source);
我建议您阅读manual for strcpy
以获得更清晰的理解。
另外,为什么不用malloc
代替new
呢?
发布于 2013-07-02 14:45:42
您以错误的方式复制名称:
strcpy(name, temp->name);
应该是
strcpy(temp->name, name);
目的地goed优先:http://www.cplusplus.com/reference/cstring/strcpy/
调试的一个好方法是打印出所有的比较结果。
(另外,我认为这是学习代码,而不是生产代码,因为它充满了缓冲区溢出错误。)
发布于 2013-07-02 14:50:51
strcpy似乎很受人尊敬。
应为strcpy(temp->name,name);strcpy(temp->admission,admission);
如果不执行temp->next = NULL;,程序也可能以崩溃告终。
https://stackoverflow.com/questions/17419032
复制相似问题