strpbrk和strcspn这两个函数功能相似,区别在于前者返回的是一个指针,而后而返回的是一个数组下标值,或者可以前者为绝对值,而后者为偏移量,为一相对值,下面分别举两个简单的例子来显示它们的作用和区别: // strpbrk示例: #include #include int main() { char* str1 = "Hello, world"; char* str2 = "Welcome you"; char* strp = strpbrk(str1, str2); if (strp != NULL) printf("%s\n", strp); return 0; } 以上输出结果为:ello, world,原因是先检查str1的第一个字符“H”是否在str2中,如果不再则继续检查str1的下一个字符是否在str2中,如果检查到在str2中,则返回指向str2该位置的指针,在这个例子中,也就是返回指向str1的“e”字符处的指针。 下面用同样的代码来看看strcpsn: // strcspn示例: #include #include int main() { char* str1 = "Hello, world"; char* str2 = "Welcome you"; int n = strcspn(str1, str2); printf("%s\n", str1+n); return 0; } 运行后不难发现,两者的结果是一样的。 但请注意一点如果strpbrk没有遇到匹配的,则返回NULL,而strcspn则返回第一个字符的尾部,亦即第一个字符串的长度值。