ANSI C中常见的字符串函数

strcpy()函数:把s2指向的字符串(包括空字符)复制到s1指向的位置,返回值是s1,在调用strcpy函数的时候,s1可以不指向数组的开始,例如:第一个参数为s1+5,表示把s2指向的字符串复制到s1+5指向的位置。

char *strcpy (char * s1, const char * s2);

strncpy()函数:把s2指向的字符串复制到s1指向的位置,复制的字符数不超过n个,返回值是s1。如果s2字符串的字符数少于n个,在s1字符串中就以空字符('\n')填充。如果s2字符串的字符数大于或等于n个,就会复制s2的前n个字符,然后返回s1的时候就不会有字符串结束标志(空字符\0),就会有奇怪的字符返回。

char *strncpy (char * s1, const char * s2, size_t n);

strcat()函数:把s2指向的字符串复制到s1指向字符串的结尾,复制过来的s2所指字符串的第一个字符覆盖了s1所指字符串结尾的空字符。返回值是s1

char *strcat (char * s1, const char * s2);

strncat()函数:s2字符串中只有前面n个字符被追加到s1字符串的结尾,复制过来的s2所指字符串的第一个字符覆盖了s1所指字符串结尾的空字符。s2字符串中的空字符及其后的任何字符都不会被复制,并且自动添加一个空字符到所得结果后面。返回值是s1

char * strncat (char * s1, const char * s2, size_t n);

上面几个字符串函数调用成功后的返回值都是s1,在函数调用过程中都不会改变字符串s2的值,所以加上一个const限定符。在使用上面几个函数的时候,可以直接调用不获取返回值,因为在调用过程中s1所指向的字符串发生了变化,然后直接使用s1指针。

strcmp()函数:如果s1指向的字符串在机器编码(字符一般都是使用ASCII码,依次比较单个字符)落后于s2指向的字符串,函数的返回值是一个正数,如果两个字符串相同,返回值是0,如果s1指向的字符串在机器编码先于s2指向的字符串,函数的返回值是一个负数。

int strcmp (const char * s1, const char * s2);

strncmp()函数:该函数与上面strcmp()函数一样,只是多了一个参数,表示只比较前n个字符或者遇到第一个空字符时会停止比较,由二者中最先被满足的那一个条件终止比较过程。

int strncmp ( const char * s1, const char * s2, size_t n);

strchr()函数:该函数返回一个指向字符串s中存放字符c的第一个位置的指针(标志字符串结束的空字符是字符串的一部分,也可以搜索到)。如果没有找到该字符,函数就返回空指针。

char * strchr (const char * s, const char c);

strrchr()函数:与strchr()函数类似,该函数返回一个指向字符串s中存放字符c的最后一个位置的指针。如果没有找到该字符,函数就返回空指针。

char * strrchr ( const char * s, const char c);

strpbrk()函数:该函数返回一个指针,指向字符串s1中存放s2字符串中的任何字符的第一个位置。如果没有找到任何字符,函数就返回空指针。

char * strpbrk (const char * s1, const char * s2);

strstr()函数:该函数返回一个指针,指向s1字符串中第一次出现s2字符串的地方。如果没有找到s2字符串,函数就返回空指针。

char * strstr (const char * s1, const char * s2);

strlen()函数:该函数返回s字符串中字符的个数,不包括字符串结束标志的空字符。

size_t strlen (const char * s);

memcpy()函数:上面提到的strcpy()函数和strncpy()函数可以复制字符数组,memcpy()函数额可以复制其他类型的数组,从s2指向的位置复制n字节数据到s1指向的位置,且返回s1的值,关键字restrict可以假定两个内存区域之间没有重叠,如果两个区域存在重叠时使用memcpy()函数,其行为是不可预知的。参数为void类型指针,C允许将任何类型的指针赋值给void*类型指针。第三个参数是指定要复制的字节数。

void * memcpy (void * restrict s1, const void * restrict s2, size_t n);
memmove()函数:和上面提到的memcpy()函数一样,可以复制其他类型的数组,但是没有restrict限制,两个区域可以存在重叠,因为在copy的时候,是先把所有字节复制到一个临时缓冲区,然后再复制到最终目的地。
void * memove (void * s1, const void * s2, size_t n);
上面提到的 size_t类型和所有的字符串函数都是在 string.h头文件里面定义的,其中size_t类型是sizeof运算符返回的任何类型,C规定sizeof运算符返回一个整数类型,但是没有说明是指定的哪种整数类型。通常情况下,不同的系统有不同的整数类型。友情链接: C语言中字符串长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值