奇怪的strstr行为

时间:2013-12-24 10:18:47

标签: c strstr

我正在尝试在字符串中找到子字符串的位置。

#include <string.h>
#include <stdio.h>

void find_str(char const* str, char const* substr) 
{
    char* pos = strstr(str, substr);
    if(pos) {
        printf("found the string '%s' in '%s' at position: %d\n", substr, str, pos - str);
    } else {
        printf("the string '%s' was not found in '%s'\n", substr, str);
    }
}

int main(int argc, char* argv[]) 
{
    char* str = "gdeasegrfdtyguhıjohhıhugfydsasdrfgthyjkjhghh";
    find_str(str, "hh");
    find_str("dhenhheme    kekekeke hhtttttttttttttttttttttttttttttttttttttttthhtttttttttttt", "hh");

    return 0;
}

输出:

  

找到字符串'hh'   'gdeasegrfdtyguhıjohhıhugfydsasdrfgthyjkjhghh'位置:19

     

发现   'dhenhheme kekekeke中的字符串'hh'   hhtttttttttttttttttttttttttttttttttttttttttttthhtttttttttttt'位置:   4

在第一个例子中,它说它处于第19位。但不应该说它18?因为在第二个例子中它表示4.它从子串的开头开始。

我很困惑。

1 个答案:

答案 0 :(得分:9)

字符'ı'不是ASCII字符,因此可能占用两个字节。