1.什么是字符串?
由若干个字符组成,末尾以字符?\0?结束
解析: 1、字符串中都是字符 2、末尾必然有’\0’结束标记 3、字符串用双引号来描述
2.区分0、?0?、‘\0’、NULL
0是int型,在内存中占4字节-32位,每个二进制位都是0
"0"、"\0"是字符,占1字节-8位:
"0":0x30
"\0":0x00
NULL:#define NULL (void *)0 占4字节-32位,每个二进制位都是0
3.str开头的库函数与mem开头的库函数比较
str:处理以'\0'结尾的字符串
mem:只处理若干字节数据(一块内存区域),而不关心处理的内容是否是字符串
4.char *strcpy(char *dest, const char *src)
dest指向的空间足够大(写入)
dest与src指向的空间不重叠
以上两点也说明了strcpy函数的潜在危险:
如果dest空间不够大、dest与src重叠则可能会得不到正确答案。
5.char *strncpy(char *dest, const char *src, unsigned n)
通常第三个参数n用来表示dest指向空间的可用字节数,以保证访问不会越界
dest与src指向的空间不重叠
如果n小于等于src的长度,则目标位置上的内容不会形成一个合法的字符串
5.char *memcpy(void *dest, const void*src, unsigned n)
将从src指向的内存区域中的内容复制n个字节到dest指向的内存区域中
dest与src指向的空间不重叠
7.void *memmove(void *dest, void *src, unsigend n)
将从src指向的内存区域中的内容复制n个字节到dest指向的内存区域中
dest与src指向的空间可以重叠
8.void *memset(void *s, int c, unsigned n)
向某一块内存区域填充指定数值
将从s地址开始的n个字节填充为数据c
返回值与s相同
通常用于将某块区域清零
9.char *strcat(char *s1, char *s2)
char *strncat(char *s1, char *s2, unsigned n)
在字符串原有内容的基础上再添加新内容
strncat也是对strcat的改进,最后一个参数代表从s2指向的字符串中最多取n个字符连接到dest的末尾,以保证不发生越界
10.比较字符串
区分大小写
int strcmp(const char *s1, const char *s2):
int strncmp(const char *s1, const char *s2, unsigend n)
不区分大小写
int strcasecmp(const char *s1, const char *s2):
int strncasecmp(const char *s1, const char *s2, unsigend n)
11.int memcmp(const void *s1, const void *s2, unsigend n)
比较s1及s2指向区域中的n个字节
12.查找一个字符串中是否有指定字符
从左向右查找:char * strchr(const char *s, int c)
从右向左查找:char *strrchr(const char *s, int c)
若未找到返回值为NULL(空指针)
若找到则返回该字符在字符串中所在处的地址值
13.char * strstr(const char *src, const char *substr)
查找一个字符串中是否有指定的子字符串
若未找到则返回NULL
若找到则返回该字串在源串中的首字符地址值
14.int strspn(const char *, const char *);检索字符串
strspn函数范例strspn(“abc”, “bcd”),搜索字符串“abc”中是否有不存在于字符集“bcd”中出现的字符。如?a?没有出现在”bcd”中, 则函数返回字符串“abc”中?a?的下标:0,如果第一个参数代表的字符串中的所有字符都出现在第二个参数代表的字符串中则函数返回'\0'字符
int strcspn(const char *, const char *);
strcspn函数范例strcspn(“abc”, “bcd”),搜索字符串“abc”中出现在”bcd”字符集中的字符返回其下标,则函数应该返回“abc”中?b?的 下标:1;若第一个参数中所有字符都没有在第二个参数中出现则返回?\0'的下标。的下标:3。
15.char * strtok(char *src, char *delim)分割字符串
按照指定的字符把源串分割为更小的字符串
src指向待分割源串(该区域可写入)
delim分割依据
在src中查找是否有delim指向的字符串中的内容,如有则将src中出现该字符的位置设置为?\0?,返回值为分割出的字串的首地址,分割完毕返NULL
char *strtok_r(char *str, char *delim, char **savep)
比strtok多一个参数,用于保存每次调用完函数后下一次进行字符串分割时的起始地址,该参数的值是在strtok_r中设置的
注意:
使用strtok、strtok_r函数分割函数时,待分割的字符串应该保存在一个可写区域内。
16.int atoi(char *s):字符串转为整数,不能转换则返回0
double atof(char *s)字符串转为整数
double aotf(char *s)字符串转为浮点数
long strtol(char *nptr, char **endptr, int base)改进atoi函数:
nptr:指向要进行转换的字符串
endptr:函数返回时指向nptr中未被识别的第一个字符。
base:表示基数