不太确定是书上写错了还是网上的说法不对
书上说strchr函数如果s字符串包含字符c,则返回指向s首位置的指针
而网上说将返回字符c的位置
书上说strpbrk函数如果s1字符串如果包含s2中任意字符,则返回指向s1首位置的指针,否则返回空字符
而网上说strpbrk函数如果s1字符串如果包含s2中任意字符,则返回指向第一个相同字符的指针,否则返回null指针
请问哪个说法是对的?
谢谢
我跟你讲 遇到这种问题 你自己动手实践才是最重要的 代码敲一敲 看下输出不就什么都知道了吗 给你个测试程序。
#include <stdio.h>
#include <string.h>
int main()
{
char *s = "hello world";
char *s1 = "first";
char *s2 = "second";
char *s3 = "thrid";
char c = 'l';
printf("s字符串为 %s\n",s);
printf("c字符为 %c\n",c);
printf("s的首地址是 %d\n",s);
printf("strchr 包含返回%d\n",strchr(s,c));
printf("s1字符串为 %s\n",s1);
printf("s2字符串为 %s\n",s2);
printf("s3字符串为 %s\n",s3);
printf("strpbrk s1包含s3中的字符 返回%d\n",strpbrk(s1,s3));
printf("s1的首地址是 %d\n",s1);
}
顺便把输出结果也给你把, 你自己理解下
s字符串为 hello world
c字符为 l
s的首地址是 67100
strchr 包含返回67102
s1字符串为 first
s2字符串为 second
s3字符串为 thrid
strpbrk s1包含s3中的字符 返回67113
s1的首地址是 67112
看函数返回类型如果返回的是int就是位置,如果是char *就是指针
应该是书上表述不清,两种说法意思是一样的,首位置应该是指s1首次出现c的位置。但是也不能理解为指向s1首字符的指针。
应该说网上的描述比书上的描述更准确清晰,最直接的验证方式是写个函数别分调用存在疑问的函数,然后输出一下一切就都明了了
“书上说strchr函数如果s字符串包含字符c,则返回指向s首位置的指针;而网上说将返回字符c的位置”
从函数原型char *strchr(const char *str, int c)可知,返回类型是指针类型,而“位置”的说法通常是指整数的序号,例如-1,0,1等index,所以返回指向s首位置的指针是正确的,或者更确切的表述为,返回指向字符c在s中首次出现的位置的指针。
代码验证一下:
const char str[] = "www-baidu-com";
const char ch = '-';
char *ret;
ret = strchr(str, ch);
printf("首次出现-之后的字符串是 :%s\n", ret);
输出如下:首次出现-之后的字符串是 :-baidu-com