注意下列函数
1.返回值都是一个地址(char*类型)文章中提到返回s1即返回s1的地址。
2.接受两个字符作为参数(或者有第三个整形参数)
· char*strcpy(char*restrict s1,const char *restrict s2);
该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置,返回值是s1。
·char *strncpy(char*restrict s1,const char*restrict s2,size_n);
该函数把s2指向的字符串拷贝至s1指向的位置,拷贝的字符数不超过n,其返回值是s1。该函数不会拷贝空字符后面的字符,如果源字符串的字符少于n个,目标字符串就以拷贝的空字符结尾: 如果源字符串有n个或超过n个字符,就不拷贝空字符。
·char *strcat (char restrict s1,const char*restrict s2):
拼接字符串,将第二个字符串的备份拼接在第一个字符串末尾。s2字符串的第1个字符将覆盖s1字符串末尾的空字符。该函数返回第一个参数s1
char *strncat(char *restrict s1,const char *restrict s2,size_t n);
该函数把s2字符串拷贝至s1字符串末尾,直到遇到\0或者第n个字符。第三个参数指定了最大添加字符数,用于防止strcat()函数拼接后s1缓冲区溢出导致的问题,该函数返回s1。
·int strcmp (const char*s1,const char *s2):
该函数通过比较运算符来比较字符串,如果s1字符串在机器排序序列中位于s2字符串的后面,该函数返回一个正数;如果两个字符串相等,则返回0;如果s1字符串在机器排序序列中位于s2字符串的前面,则返回一个负数。该函数比较字符串而不是数组,如果申请的数组空间大于字符串需要空间,比较完字符串就返回值,不会遍历数组,且结尾空字符也参与字符串的比较。
//注意该函数比较字符串“A”而不是字符’A‘。
·int strncmp (const char *s1,const char *s2,size_t n);
该函数的作用和strcmp ()类似,不同的是,该函数在比较n个字符后或遇到第1个空字符时停止比较。
·char *strchr(const char*s,int C);
如果s字符串中包含c字符(第二个参数字符),该函数返回指向s字符串首次出现的c字符的指针(末尾的空字符也是字符串的一部分,所以在查找范围内);如果在字符串s中未找到c字符,该函数则返回空指针。
char *strpbrk(const char *s1,const char*s2);
如果s1字符中包含s2字符串中的任意字符,该函数返回指向s1字符串首位置的指针:如果在s1字符串中未找到任何s2字符串中的字符,则返回空字符。
·char*strrchr (const char*s1,char c);
该函数返回s字符串中c字符的最后一次出现的位置(未尾的空字符也是字符串的一部分,所以在查找范围内)。如果未找到c字符,则返回空指针。
·char *strstr (const char *s1,const char*s2):
该函数返回指向s1字符串中s2字符串出现的首位置。如果在sl中没有找到s2,则返回空指针。
对库函数的模拟实现;
#define _CRT_SECURE_NO_WARINGS 1
//模拟实现strncpy和strncat/strncmp
#include<assert.h>
#include<stdio.h>
char* my_strncat(char* dest, const char* sour,int n)
{
assert(dest && sour);
char* ret=dest;
int count = 0;
while (*dest != '\0')
{
dest++;
}
while (count++ < n && (*dest++ = *sour++))
{
;
}
return ret;
}
char* my_strncpy(char* dest, const char* sour, int n)
{
assert(dest && sour);
char* ret=dest;
while (n--)
{
*dest++ = *sour++;
}
return ret;
}
int my_strncmp(char* dest, const char* sour, int n)
{
assert(dest && sour);
while (*dest == *sour)
{
dest++;
sour++;
}
return (*dest - *sour);
}
int main()
{
char arr1[] = "hello lf";
char arr2[] = "hello wolf";
// my_strncat(arr1, arr2,3);
// my_strncpy(arr1, arr2, 3);
my_strncmp(arr1, arr2, 3);
return 0;
}