我看不出我做错了什么。
void contains(NODE *head, char *user)
{
NODE *this = head;
while(this != NULL)
{
strcpy(temp, this->data);
// printf("%s\n",user);
// printf("%s\n",temp);
printf("%d test\n", strlen(user));
printf("%d node\n", strlen(temp));;
printf("%d\n",strcmp(temp, user));
if(strcmp(this->data, user) == 0){
printf("Found data %s\n", this->data);
}
this = this->next;
}
}
我在main中有这个(包含在最后一行调用):
NODE *head;
head = malloc(sizeof(NODE));
bool headNode = true;
char userID[1000];
char userIDsearch[180];
char test[180] = "monkey";
while((fgets(userID,1000,stdin) != NULL)){
// printf("%s\n", userID);
if(headNode == true)
{
head = insert(NULL, userID);
headNode = false; //this is used to insert data to my linked list for the first time
}
else
{
head = insert(head, userID);
}
}
contains(head, test);
如果我输入“monkey”, strcmp
应该为0,但它给出1.此外,我在我正在比较的两个字符串上测试并使用strlen
,由于某种原因strlen
为temp
(我的输入)给出长度+ 1,但是strlen
为~user`(我设置为字符串“monkey”)提供了正确的长度。
答案 0 :(得分:3)
不要忘记fgets()
会保留换行符,但您没有将其删除,或在test
的末尾添加一行。
如果您使用以下语句打印输入,则会发现此信息:
printf("User ID <<%s>>\n", userID);
循环内部。 <<
和>>
会显示字符串的开始和结束位置,并显示嵌入的换行符。