我有两个struct数组和一个嵌套for循环。两个数组中的单词相同,但strcasestr没有检测到它们。我使用strcasestr来查找相同单词中的子串。
以下是我的代码片段:
for(int itr = 0; itr < arrayItr; itr++)
{
for(int itr2 = 0; itr2 < arrayItr2; itr2++)
{
if(strcasestr(termsArraypast[itr].term, termsArrayTerms[itr2].term) > 0)
{
printf("%d %d %s\n", termsArraypast[itr].charDistance, termsArraypast[itr].termDistance, termsArraypast[itr].term);
}
}
}
请注意,我的程序中已经声明了所有这些变量。我刚刚在这个部分工作了几个小时,无法弄明白。感谢。
答案 0 :(得分:0)
char * strcasestr(const char * haystack,const char * needle);
返回指向子字符串开头的指针,如果找不到字符串,则返回null
因此它将返回一个指针值,而不是整数,它可能超出整数范围。
你正在将它与大于0进行比较。这是错误的,你可以检查不是零。
例如:程序
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[10];
char arr2[10];
int ret;
strcpy(arr1,"foobar");
strcpy(arr2,"foobar");
printf("arr1 %s\n",arr1);
printf("arr2 %s\n",arr2);
ret= strcasestr(arr1,arr2) ;
printf("ret %d ret %p \n",ret,ret);
if(strcasestr(arr1,arr2) >0)
{
printf("sub found\n");
}
if(strcasestr(arr1,arr2) != 0)
printf("substring found for not null check \n" );
}
O / P
arr1 foobar
arr2 foobar
ret -1073787886 ret 0xbfff4c12
substring found for not null check