1

这是我到目前为止所拥有的:

for(i = 0; i <= 9; i++){
    printf("%d", i);
    found = strpbrk(nameholder[i], searchterm);
    if(strpbrk(nameholder[i], searchterm) == searchterm){
        printf("found\n");
        foundwhere = i + 1;
        break;
    }
}// end for

当我运行程序时,strpbrk 函数找到了字符串,但由于某种原因它永远不会触发 if 语句。我错过了什么?

4

2 回答 2

2

根据http://en.cppreference.com/w/c/string/byte/strpbrkstrpbrk()是为了

const char* strpbrk( const char* dest, const char* str );
查找指向的字节串中的第一个字符dest,也就是指向的字节串中的第一个字符str

因此,如果你真的想找到整体 searchterm而不是in的任何字符,你应该使用or 。searchtermnameholder[i]strcmpstrstr

另请注意,运算符==不能用于比较两个char*字符串的相等性,因为它只是比较地址是否相等或不考虑字符串内容。改为使用strcmp()

于 2012-09-18T17:06:04.490 回答
-1

如果我正确理解(您的描述含糊不清)您正在尝试做什么,那么您似乎使用了错误的功能。

在 strpbrk 上引用 cpp 文档:

返回指向 str1 中第一次出现的作为 str2 一部分的任何字符的指针,如果没有匹配项,则返回空指针。

这不是你想要它做的,对吧?你应该看strcpm功能。 http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

您的代码应如下所示:

for(i = 0; i <= 9; i++){ 
    if(strcmp(nameholder[i], searchterm) == 0){
        printf("found\n");
        foundwhere = i + 1;
        break;
    }
}// end for
于 2012-09-18T17:07:02.853 回答