标签:类型 clu data- 个数 start 必须 eof 功能 长度
测字符串长度函数
函数定义 size_t strlen(const char*s)
函数功能
测字符串指针s指向的字符串中字符的个数,不包括‘\0‘
返回值:字符串中字符个数
举例
int main(){
char str1[20] = "hello";
char *str2 = "hello"
printf("%d\n",sizeof(str1)); //20
printf("%d\n",sizeof(str2)); //4
printf("%d\n",strlen(str1)); //5
printf("%d\n",strlen(str2)); //5
}
sizeof 是个关键字,测量数据的占用内存空间大小
字符串拷贝函数
函数的定义:char *strcpy(char *dest,const char * src);
函数的说明:
拷贝src指向的字符串到dest指针指向的内存中,‘\0’也会拷贝
函数的返回值
目的内存的地址
注意:在使用此函数的时候,必须保证dest指向的内存空间足够大,否则会出现内存污染
char *strncpy(char *dest,const char * src,size_t n);
函数说明:
将src指向的字符串前n个字节,拷贝到dest指向的内存中
返回值:目的内存的首地址
注意:
strncpy 不拷贝 ‘\0‘
如果n大于src指向的字符串中的字符个数,则在dest后面填充n-strlen(src)个 ‘\0‘
举例
int main(){
char buf[100] ="aaaaaaaaaaaaaaaaaa";
strcncpy(buf,"helloworld",5);
printf("%s\n",buf);
}
结果为 helloaaaaaaaaaaaaaaaaa 验证了不拷贝 ‘\0‘
字符串追加函数
函数定义 char*strcat(char * dest,const char*src);
函数功能:
strcat函数追加src字符串到dest指向的字符串的后面。追加的时候会追加‘\0‘
注意 保证dest指向的内存空间足够大
举例
int main(){
char str[20] = "aa\0aaaaaaaaaaaaa";
char *src = "hello";
p = strcat(str,src); //将src的内容追加到 str后面
printf("%s\n",str);
结果为 aahello 验证了追加字符串的时候追加‘‘\0‘
}
char *strncat(char *dest,const char *src,size_t)
追加src指向的字符串的前n个字符,到dest指向的字符串的后面
注意如果n大于src的字符个数,则只将src字符串追加到dest指向的字符串的后面
举例
char str[20] ="aa\0aaaaaaaaaaaaaa";
char*src ="hello";
strncat(str,src,10);
printf("%s\n",str);
strcmp/strncmp 字符串 比较
函数定义: int strcmp(const char * s1,const char *s2)
函数说明
比较s1和s2 指向的字符串的大小
比较的方法:逐个字符去比较ASCII码,一旦比较出大小返回
如果所有字符都一样,则返回0
返回值
如果s1指向的字符串大于s2指向的字符串 返回1
如果s1指向的字符串小于s2指向的字符串 返回-1
如果相等的话 返回0
int strncmp(const char*s1,const char * s2,size_t n);
函数说明:比较s1和s2 指向的字符串中前n个字符
字符查找函数
函数定义: char *strchr(const char *s,int c);
函数说明:在字符指针s指向的字符串中,找ascii码为c的字符,注意,是首次匹配,如果过说s指向的字符串中有个ASCII为c的字符,则找的是第一个字符
返回值:
找到了返回找到的字符的地址
找不到返回NULL
函数定义 :char * strrchr (const char * s,int c);
函数的说明: 末次匹配
在s指向的字符串中,找最后一次出现的ASCII为c的字符
返回值:
末次匹配的字符的地址
字符串匹配函数
char * strstr (const char* haystack,const char *needle)
函数说明:
在haystack 指向的字符串中查找needle指向的字符串,也是首次匹配
返回值
找到了: 找到的字符串的首地址
没找到: 返回NULL
字符串转换数值
atoi /atol/atof //字符串转换功能
函数的定义: int atoi(const char*nptr);
函数的功能:
将nptr 指向的字符串转换成整数,返回
举例
int num;
num =atoi("123");
则num的值为123
long atol (const char*nptr); //返回一个长整型的数
double atof(const chat*nptr); //返回一个double类型的数
字符串切割函数
函数定义: char * strtok(char *str ,const char *delim);
函数的功能
字符串切割,按照delim指向的字符串中的字符,切割str指向的字符串,起始就是在str指向的字符串中发现了 delim字符串中的字符,就将其变量‘\0‘,调用一次 strtok只切割一次,切割一次之后,再去切割的时候strtok 的第一个参数传NULL,意思是接着上次切割的位置继续切
注意 如果str字符串中出现了连续的几个delim中的字符,则只将第一个字符变量‘\0‘
举例
int main(){
char str [100] = “lucy : yuxin ,hanbing,xiaoyang:xueyang;zhanghu:yongheng”;
char*p[8];
int i= 0,j;
p[i] = strtok(str,",:;");
while(p[i]!=NULL)
{
i++;
p [i] = strtok(NULL,",:;");
}
for(j=0;j<i;j++)
{
printf("%s\n",p[j]);
}
}
格式化字符串操作函数
int sprintf (char * buf,const char* format,...);//输出到buf指定的内存区域
列如
char buf[20];
sprintf(buf,"%d:%d:%d",2013,10,1);
printf("buf=%s\n",buf);
int sscanf(const char * buf,const char *format,...) //从buf指定的内存区域中读入信息
列如
int a,b,c
sscanf("2013:10:1","%d:%d:%d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
sscanf 高级用法
跳过数据 %*s 或 % *d
列如
char buf[20];
sscanf("1234 5678","%*d%s",buf) ;// 跳过1234,然后隔一个空格获取字符串
printf("%s\n",buf);
读指定宽度的数据:%[width]s
列如
char buf[20];
sscanf("12345678", "%4s",buf); //从字符串中获取字符串,只要4个字节,存放在buf中
printf("%s\n",buf);
支持集合操作:只支持获取字符串
%[a-z] 表示匹配a到z 中任意字符 (尽可能多的匹配)
举例
char buf[20];
sscanf("agcd32DajfDdFF","%[a-z]",buf);//从字符中获取输入只要‘a‘ 和’z‘之间范围内的,就终止了
printf("%s\n",buf); //结果为agcd
%[aBc] 匹配 a、B、c中一员,贪婪性
%[ ^ aFc] 匹配非aFc的任意字符
% [ ^ a-z ] 表示读取除a-z以外的所有字符
练习
使用sscanf 读取# 号和@之间的字符串 abc#def@ghi
使用sscanf 读取"[02:06.85]" 02(代表分钟)06(代表秒)到整型变量 minute、second中
const: 用法
const 修饰普通变量,代表只读的意思
const int a =100; //定义了一个只读变量 a值为100
以后再程序中,不能再给a赋值了
const修饰指针
const char*str
意思是str指向的内存的内容不能通过str来修改
用来保护str指向的内存的内容,但是str 的指向是可以改变的
char *strcpy(char *dest,const char * src);
char* const str
意思是str 是只读的变量,str不能指向别的地方
但是str指向的内存的内容,是有可能可以修改的
const char * const str
str 不能指向别的地方。指向的内存的内容也不能通过str去修改
sscanf()的正则表达式是从头向后顺序查找匹配字符。找不到就返回错误,如下面的几个列子
char src[]="abcdefABCD123@456EFGghi";// 一个buf只对应一个%,%*可以用多次
sscanf(src,"%[A-Z]",buf);// buf =空 遇到A-Z以外的字符就停止,%表示选择,%后面的表示条件,条件s表示任意字符
sscanf(src,"%[ ^ A-Z]",buf);// buf=abcdef ^表示取反,即遇到A-Z之间的字符就结束
sscanf(src,"%[ ^A]",buf);// buf = abcdef, 从左向右获取除A以外的字符,遇到A结束
sscanf(src,"%*[ ^ A]",buf);// buf = 空, *表示后面匹配的字符不保存([ ^A] 本应该是abcdef,但因加了 *所以没有了即过滤掉了 )
sscanf(src,"%*[ ^A]%s",buf);//buf是ABCD123@456EFGghi , s表示获取字符串,虽然前面没有保存字符,但后面的字符可以获得并保存
sscanf(src,"%*[ ^A]%[ ^@]",buf); //buf = ABCD123 ,直到遇到A并包含A结束
sscanf(src,"%*[ ^A]A%[ ^@]",buf) //buf = BCD123,直到遇到A但不包含A结束,A为定界符
标签:类型 clu data- 个数 start 必须 eof 功能 长度
原文地址:https://www.cnblogs.com/fengzi759/p/11618710.html