C语言中常用的字符串操作函数,有比如计算字符串长度、字符串拷贝,字符串比较等这样的整体操作函数,有字符串查询函数,也有字符串转换函数等等,这里先介绍字符串整体操作函数。
字符串整体操作函数
实际编程中,经常遇到对字符串整体的控制等操作,比如长度测量函数strlen(),字符串拷贝函数strcpy()/strncpy(),字符串比较函数 strcmp()/strncmp(),字符串连接函数strcat()/strncat()等,这些函数是非常有用的。
1、strlen
原型:int strlen ( const char *str )功能:返回字符串的实际长度,不含 '\0'。
strlen之所以不包含'\0',是因为它在计数的途中遇到'\0'结束。
注意:sizeof与strlen不同,之前说过,sizeof不是函数,我们定义一个变量,使用sizeof可以计算所定义变量占用的内存大小,而且遇到'\0'不会结束;strlen是测字符串的实际长度。如 char buf[100] = "abc"; 则sizeof(buf)为100,而strlen(buf)为3。
2、strcpy / strncpy
1、strcpy
原型:char *strcpy( char *dest, const char *src )功能:把src所指向的以 '\0'结尾的字符串复制到dest所指向的数组中(strncpy,代表只拷贝前n个)返回值:返回参数dest字符串起始地址
需要注意的是,strcpy()遇到'\0'会结束并包含'\0'
2、strncpy
原型:char *strncpy(char *dest, const char *src, size_t n)功能:将参数src字符串拷贝前n个字符至参数dest所指的地址返回值:返回参数dest字符串起始地址
注意:strncpy()遇到'\0'结束,并且在个数n不足的情况下会用'\0'补齐。如上面例子,将数组src中的字符串拷贝4个字节到数组dest中,此时打印dest结果为“h”,那是不是说明strncpy遇到'\0'结束呢?这里还不足以说明,可能是strncpy的问题也可能是printf的问题。再看第二次输出,我们将dest中的元素分别打印出来:"h 56789",中间空有3个空字符(即'\0'),很明显,我们拷贝了4字节,但是'\0'后面的'e'和'l'并没有拷贝过去,并且后面三字节是用空字符来补全的,由此说明strncpy遇到'\0'结束,并且在个数n不足的情况下会用'\0'补齐。
strcmp/strncmp
原型: int strcmp( char *str1, char *str2 )功能:比较str1和str2的大小;返回值:相等返回0,str1大于str2返回1,str1小于str2返回-1;
对照ASICC码表可知,'A'为65,'a'为97,由于s1与s2相同,比较结果为0,s3大于s1,比较结果为1,s1小于s3,故比较结果为-1.
strcat/strncat
原型:char *strcat(char *dest, const char *src)功能:将参数src字符串拷贝到参数dest所指的字符串尾返回值:返回参数dest的字符串起始地址
注意:第一个参数dest要有足够的空间来容纳要拷贝的字符串,如上面例子,s1不能写成char s1[] = "AAA";,如果这样写,s1只有4字节('A','A','A','\0'),如果将s2追加到s1末尾,由于s1空间不足会导致错误发生。
好了,就这些吧,后续有时间来点符串查询函数和字符串转换函数。
举报/反馈