字符串的操作主要包含字符串的拷贝、连接、比较、切割、变换等操作。
//字符串操作函数
#include <string.h> //使用这些函数需要包含的头文件
1.strlen //测量字符串的长度,不包含结束符
2.strcpy/strncpy //字符串拷贝
3.strcat/strncat //连接
4.strcmp/strncmp //比较
//共同特点:遇到'/0'自动结束
strlen长度测量
函数原型 size_t strlen(const char *);
举例如下:
char buf[128]="abcd";
int size=sizeof(buf) size值为128
int strlong=strlen(buf) size值为4
char buf[]="abcd";
int size=sizeof(buf) size值为5
int strlong=strlen(buf) size值为4
char buf[]="abcd\0he";
int size=sizeof(buf) size值为8
int strlong=strlen(buf) size值为4
char buf[]="abcd\123\\he";
int size=sizeof(buf) size值为9
int strlong=strlen(buf) size值为8
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。 可以转义三位
而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
'\\'表示'\'
\xdd 十六进制转义,0~9,a~f 不能超过一个字节
字符串长度为0不代表字符串为空,也可能以’\0‘开头
strcpy 、strncpy拷贝
原型 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
//需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
原型 char *strncpy(char *dest, const char *src, size_t n)
//把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
strcat 、strncat 字符串拼接
函数原型 char *strcat(char *dest, const char *src)
//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
//dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
//src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。
函数原型 char *strncat(char *dest, const char *src, size_t n)
//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
//dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
//src -- 要追加的字符串。
/n -- 要追加的最大字符数。
strcmp、strncmp字符串比较
两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 \0 为止。
当两个字符串不相等时,C 标准没有规定返回值会是 1 或 -1,只规定了正数和负数。
有些会把两个字符的 ASCII 码之差作为比较结果由函数值返回。但不能以此条依据作为程序中的流程逻辑。
原型 int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
该函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
原型 int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字节。
str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
n -- 要比较的最大字符数。
该函数返回值如下:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。