使用strstr函数的问题

时间:2011-08-09 11:40:25

标签: c

我在使用strstr时遇到问题。这就是我所拥有的:

  1. 将长度为21个字节的字符数组传递给函数。

  2. 遍历链表的节点,将每个节点的字符数组与上面第1点中提到的数组进行比较

  3. 无论传递任何字符串,
  4. strstr始终返回NULL

  5. 比如像strstr("hello","he")这样的代码。它应该返回指向“hello”的指针,但这在我的代码中永远不会发生。它始终返回NULL

  6. 以下是该计划的代码段:

     void display_to_file(const char *chr,c_uint32 pos_in_list,c_uint32 line_no)
    {
        NODE *search = ptrs_to_heads_of_alpha[pos_in_list];
        char *chk;
        char redundant[21]={'\0'};
        int first=1;
        uint32 count = 0;
    
        while((NULL!=search) && (count<21))
        {
            printf("\nsearch->arg=%s",search->arg); /*for example search->arg is "hello"*/
                      /*above statement prints "hello"-correctly*/                                        
                          /*for example chr="?he" */
                        printf("\nchr=%s",&chr[1]); /*prints "he" correctly*/
            chk=strstr(search->arg,&chr[1]); 
            if(chk != NULL) /*is always null- not known why it returns null even for valid cases*/  
                {
                printf("\nentered_\n");
                ++count;
                if(1 == first)
                {
                    fprintf(op_fp,"  %s\n",search->arg);
                    strcpy(redundant,search->arg);
                    printf("\nop:%s\n",search->arg);
                    first = 0; /*only for first node print*/
                }
                else 
                {
                    if(strcmp(redundant,search->arg) == 0)/*duplicate found*/
                        --count; /*need to search for one more item*/
                    else
                    {
                        fprintf(op_fp,"  %s\n",search->arg);
                        strcpy(redundant,search->arg);
                    }
                }
            }
            else
                printf("\nelse,else,else\n\n"); /*Always this statement is executed even
                                                                       if I passed valid arguments*/
    
            search=search->next;
        }
    }
    

2 个答案:

答案 0 :(得分:1)

编译时是否有此语句的警告?:

   chk=strstr(search->arg,&chr[1]); 

第二个参数应该是strstr()中的const char * 确保这件事。

尝试使用此声明还有一件事

 chk=strstr(search->arg,"he"); 

再检查一下你是否包含了string.h

  #include<string.h>

答案 1 :(得分:0)

尝试使用带引号(或其他明显符号)的字符串,因为可能有空格字符,例如,您看不到。所以替换

printf("%s\n", some_string);

printf("\"%s\"\n", some_string);

我建议总是使用“printf-debugging”。但是,您的问题可能在其他地方。尝试缩短程序以查找错误。