c语言笔记-字符串函数-strstr-strlen-strtok以及sizeof
目录
c语言笔记 字符串函数—strstr strlen strtok以及sizeof
目录
函数strstr
功能:strstr是查找字符串中子串的函数,例如"abcdef" 如果出现字串"abc"或者其他字串,如果匹配成功就会返回指向字串的指针。失败返回NULL
- 所需头文件 #include
- strstr(指向该字符串的指针,子串)
- strstr(字符串的地址,子串)
具体使用代码演示:
#include<stdio.h>
#include<string.h>
int main()
{
char *s = "abcfef.txt";
char *p = strstr(s,".txt");
if(p == NULL)
{
printf("没有.txt文件\n");
}
else
{
printf("该文件的类型是%s\n",p);
}
}
函数strlen
功能:strlen函数是计算一个字符串内的有效长度,有效长度是不包括字符串中的结束符’\0'
- 头文件 #include
- strlen(指向字符串的指针)
- strlen(字符串的地址)
- 返回值是整型—-字符串的有效长度
注意一
- 使用strlen函数的时候,如果出现\0结束标识,strlen函数就会停止计算,无论\0后面是否数值
- 我们在使用sizeof的时候如果把指针名放进去,那就是计算指针的内存大小,我们应该是放数 组名进去,或者放字符串 。
代码演示:
#include<stdio.h>
#include<string.h>
int main()
{
char *s = "baidu.com";
printf("%ld\n",strlen(s));
printf("%ld\n",sizeof("baidu.com"));
return 0;
}
注意二
1.当数组作为函数参数传递时,它会退化为指向其首元素的指针。此时,sizeof操作数将返回指针的大小,而不是数组的大小。
2.在动态分配的数组(通过malloc或new)中,sizeof无法获取数组的大小,因为动态分配的数组在运行时才确定大小,编译器无法在编译时计算其大小。
例如:
char *s = "baidu.com";
char p[] = "baidu.com";
printf("%ld\n",strlen(s));
printf("%ld\n",sizeof(p));
函数sizeof
功能:sizeof函数是用来计算变量,类型,指针,数组,字符串的大小
当作用于指针时,返回指针的大小。
当作用于数组时,返回整个数组的大小。
当数组作为函数参数传递时,它会退化为指向其首元素的指针。此时,sizeof操作数将返回指针的大小,而不是数组的大小。
在动态分配的数组(通过malloc或new)中,sizeof无法获取数组的大小,因为动态分配的数组在运行时才确定大小,编译器无法在编译时计算其大小。
函数strtok
功能:分割字符串中的字串
头文件#include strtok(数组名,符号) strtok(指向数组的指针,符号)
- 头文件#include
- strtok(数组名,符号)
- strtok(指向数组的指针,符号)
- 如果成功则返回字串的指针
- 失败返回NULL,标识分解完毕
注意
- 因为strtok是会修改字符串的值将其置为\0,所以应该给它传数组名或者指向数组的指针,符号就是以什么为分割的界限。
- 使用strtok函数的时候当它遇到分解界限的符号时会将其置为\0,strtok是会改变字符串的
- 第一次调用strtok函数指向字符串str后,例如:strtok(str,";, “),下次掉用都是用NULL代表str 如strtok(NULL,”,; “,此后每次调用都要NULL代替str
代码演示:
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "abcd, 1234 ;xy , opasda ";
char *p = strtok(s,";, ");
while(p!=NULL)
{
printf("%s\n",p);
p = strtok(NULL,",; ");//指针p不断的偏移,不断的指向第一个地址
}
return 0;
}