strcmp不给0,但两个args是相同的

时间:2014-02-04 04:21:21

标签: c debugging pointers strcmp

我看不出我做错了什么。

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,由于某种原因strlentemp(我的输入)给出长度+ 1,但是strlen为~user`(我设置为字符串“monkey”)提供了正确的长度。

1 个答案:

答案 0 :(得分:3)

不要忘记fgets()会保留换行符,但您没有将其删除,或在test的末尾添加一行。

如果您使用以下语句打印输入,则会发现此信息:

printf("User ID <<%s>>\n", userID);

循环内部。 <<>>会显示字符串的开始和结束位置,并显示嵌入的换行符。