我在使用strstr
时遇到问题。这就是我所拥有的:
将长度为21个字节的字符数组传递给函数。
遍历链表的节点,将每个节点的字符数组与上面第1点中提到的数组进行比较
strstr
始终返回NULL
比如像strstr("hello","he")
这样的代码。它应该返回指向“hello”的指针,但这在我的代码中永远不会发生。它始终返回NULL
。
以下是该计划的代码段:
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;
}
}
答案 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”。但是,您的问题可能在其他地方。尝试缩短程序以查找错误。