1、求字符串长度函数:strlen
函数原型:
size_t strlen(char const *string);
2、复制字符串函数:strcpy
函数原型:
char *strcpy(char *dst,char const *src)
其中,
dst
表示目标字符串的地址,src
表示源字符串的地址。strcpy
函数返回的是指向目标字符串的指针。
strcpy
函数的作用是将src
指向的字符串复制到dst
所指向的位置,包括字符串末的’\0’字符。由于原字符串必须以’\0’结尾,因此通常情况下为了防止越界,目标字符串空间应该比源字符串大至少1个字节。
3、 链接字符串:strcat
函数原型:
char *strcat(char *dest,char const *src);
strcat
是C语言中的一个字符串操作函数,用于将一个字符串追加到另一个字符串的末尾。其中,
dest
表示目标字符串的地址,src
表示源字符串的地址。strcat
函数返回的也是指向目标字符串的指针。dest开辟的空间一定要大于src的空间,否则会出错的。
4、 字符串比较函数:strcmp
函数原型:
int strcmp(const char *s1, const char *s2);
其中,
s1
和s2
分别表示需要比较的两个字符串的指针。strcmp
函数返回一个整数值,如果两个字符串相等,返回0;如果第一个字符串小于第二个字符串,返回一个负数;如果第一个字符串大于第二个字符串,返回一个正数。
5、长度受限的字符串函数
char *strncpy(char *dst,char const *src,size_t len);其中,
dest
是目标字符串的地址,src
是源字符串的地址,n
表示需要复制的字符个数。该函数返回一个指向目标字符串的指针。
strncpy
函数将从src
指向的字符串中复制n
个字符到dest
所指向的字符串中。如果src
的长度小于n
,则在dest
的其余位置填充 ‘\0’ 以保证dest
的长度为n
。如果src
的长度大于等于n
,则dest
将不会以 ‘\0’ 结尾。char *strncat(char *dst,char const *src,size_t len);
其中,
dest
表示目标字符串的地址,src
表示源字符串的地址,n
表示需要追加的字符个数。该函数返回一个指向目标字符串的指针。
strncat
函数将从src
指向的字符串中追加n
个字符到dest
所指向的字符串的末尾,并在dest
追加的字符串的末尾添加一个 ‘\0’。如果src
的长度小于n
,则在dest
的其余位置填充 ‘\0’ 以保证dest
的长度为n
。如果src
的长度大于等于n
,则dest
将不会以 ‘\0’ 结尾。int strncmp(char const *s1,char const *s2,size_t len);
其中,
s1
和s2
分别表示需要比较的两个字符串的指针,n
表示需要比较的字符个数。strncmp
函数返回一个整数值,如果前n
个字符相等,返回0;如果第一个字符串小于第二个字符串,返回一个负数;如果第一个字符串大于第二个字符串,返回一个正数。
strncmp
函数的比较方式与strcmp
相似,不同之处在于strncmp
比较的字符个数是通过第三个参数n
来指定的。如果遇到结尾字符 ‘\0’ 或者比较字符达到n
个,则停止比较并返回相应的结果。
6、字符串查找相关函数
1、查找一个字符:strchr,strrchr
char *strchr(char const *str, int ch);
参数
str
是要搜索的字符串,参数c
是要查找的字符。函数返回指向首次出现的字符c
的指针,或者返回NULL
(如果未找到字符c
)char *strrchr(char const *str,int ch)
参数
str
是要搜索的字符串,参数c
是要查找的字符。函数返回指向字符串中最后一个出现的字符c
的指针,或者返回NULL
(如果未找到字符c
)。注:这个函数区分大小写。
2、查找任何几个字符:strpbrk
char *strpbrk(char const *str,char const *group)
查找任何一组字符出现在字符串中出现的位置,这个函数返回一个指向str中第一个匹配group中任意字符的位置,如果未找到皮利佩,函数返回一个NULL指针。
3、查找一个字符串:strstr
char *strstr(char const *s1,char const *s2);
这个函数在s1中查找整个s2第一次出现的起始位置,并返回一个指向改位置的指针。如果s2并没有完整的出现在s1的任何地方,函数将返回一个NULL指针。如果第二个参数是一个空字符串,函数就返回s1。
4、查找标记函数:strtok
char *strtok(char *str,char const *sep);
第一次调用时,字符串
str
必须指向待扫描的字符串,后续调用时应将str
设为 NULL。参数delim
是分隔符,可以是单个分隔符字符,也可以是多个分隔符字符组成的字符串。strtok()
函数返回分割得到的字符串中第一个小字符串的指针。当没有小字符串需要处理时返回NULL
。在多次调用
strtok()
函数时,如果str
不为 NULL,strtok()
函数会保留扫描位置的状态以便于下一次调用。因此,如果希望从一个字符串中提取多个 token,可以多次调用strtok()
函数进行操作,每次调用函数时将str
设为 NULL。5、错误信息打印函数:strerror
char *strerror(int error_number);
参数
errnum
是需要转换的错误码,函数返回一个指针,指向一个描述错误信息的字符串。
代码示例:
/**
* 字符串测试
*
*/
int string_test()
{
char *p = "hello world";
char *p1 = "good moring";
char *p2 = "lisa:";
char *dest = NULL;
char *temp = NULL;
char *dest_cat = NULL;
dest = malloc(strlen(p)+1);
if(dest == NULL)
{
DEBUG_LOG("erro malloc dest!!\n");
return ERROR;
}
/*
1、字符串复制函数以及求长度函数的使用
*/
temp = strcpy(dest,p);
DEBUG_LOG("p[%s][%d] dest[%s][%d] temp[%s][%d]]\n"\
,p,(int)strlen(p),dest,(int)strlen(dest),temp,(int)strlen(temp));
/*
operator_express.c string_test:29 p[hello world][11] dest[hello world][11] temp[hello world][11]]
*/
/*
2、连接字符串函数的使用
*/
dest_cat = malloc(64);
if(dest_cat == NULL)
{
DEBUG_LOG("error malloc dest_cat!!\n");
return ERROR;
}
temp = NULL;
temp = strcat(dest_cat,p2);
DEBUG_LOG("%s %s\n",dest_cat,temp);
temp = strcat(dest_cat,p1);
DEBUG_LOG("%s %s\n",dest_cat,temp);
temp = strcat(dest_cat,p);
DEBUG_LOG("%s %s\n",dest_cat,temp);
/*
operator_express.c string_test:49 lisa: lisa:
operator_express.c string_test:51 lisa:good moring lisa:good moring
operator_express.c string_test:53 lisa:good moringhello world lisa:good moringhello world
*/
free(dest_cat);
free(dest);
/*
3、字符串比较函数
*/
char *arrycmp1 = "hello";
char *arrycmp2 = "he";
char *arrycmp3 = "hello1";
char *arryTest = "hello";
int value = 0 ;
value = strcmp(arrycmp1,arrycmp2);
DEBUG_LOG("value = %d\n",value);
value = strcmp(arrycmp1,arrycmp3);
DEBUG_LOG("value = %d\n",value);
value = strcmp(arrycmp1,arryTest);
DEBUG_LOG("value = %d\n",value);
/*
operator_express.c string_test:78 value = 108
operator_express.c string_test:80 value = -49
operator_express.c string_test:82 value = 0
*/
/*
4、长度受限的字符串函数
*/
char *n_strarry1 = "hello!!!";
char *n_strarry2 = NULL;
char *n_strarry3 = "hel";
char *n_strarry4 = "lisa::";
char *n_strarry5 = NULL;
int n_temp = 0;
char *n_tempstr = NULL;
n_strarry2 = malloc(strlen(n_strarry1)+1);
n_strarry5 = malloc(64);
if(n_strarry2 == NULL || n_strarry5 == NULL)
{
DEBUG_LOG("error malloc n_str!!!\n");
}
n_tempstr = strncpy(n_strarry2,n_strarry1,5);
DEBUG_LOG("n_tempstr[%s] n_strarry2[%s]\n",n_tempstr,n_strarry2);
n_tempstr = strncat(n_strarry5,n_strarry4,strlen(n_strarry4)-1);
DEBUG_LOG("n_strarry5[%s] n_tempstr[%s]\n",n_strarry5,n_tempstr);
n_tempstr = strncat(n_strarry5,n_strarry1,strlen(n_strarry1)-1);
DEBUG_LOG("n_strarry5[%s] n_tempstr[%s]\n",n_strarry5,n_tempstr);
n_temp = strncmp(n_strarry1,n_strarry3,strlen(n_strarry3));
DEBUG_LOG("n_temp[%d]\n",n_temp);
n_temp = strncmp(n_strarry1,n_strarry3,strlen(n_strarry3)+1);
DEBUG_LOG("n_temp[%d]\n",n_temp);
n_temp = strncmp(n_strarry3,n_strarry1,strlen(n_strarry1)+1);
DEBUG_LOG("n_temp[%d]\n",n_temp);
/*
operator_express.c string_test:106 n_tempstr[hello] n_strarry2[hello]
operator_express.c string_test:109 n_strarry5[lisa:] n_tempstr[lisa:]
operator_express.c string_test:111 n_strarry5[lisa:hello!!] n_tempstr[lisa:hello!!]
operator_express.c string_test:114 n_temp[0]
operator_express.c string_test:117 n_temp[108]
operator_express.c string_test:120 n_temp[-108]
*/
free(n_strarry2);
free(n_strarry5);
/*
5:字符串查找函数
*/
char str[] = "This is a test string!";
char *t_str = NULL;
t_str = strchr(str,'t');
if(t_str != NULL)
{
DEBUG_LOG("t_str[%s] %d %d\n",t_str,(int)(t_str-str),(int)strlen(str));
}
t_str = strrchr(str,'t');
if(t_str != NULL)
{
DEBUG_LOG("t_str[%s] %d %d\n",t_str,(int)(t_str-str),(int)strlen(str));
}
/**
* operator_express.c string_test:141 t_str[test string!] 10 22
* operator_express.c string_test:146 t_str[tring!] 16 22
*/
t_str = strpbrk(str,"tnig");
{
DEBUG_LOG("t_str[%s] %ld\n",t_str,t_str-str);
}
/**
* operator_express.c string_test:153 t_str[is is a test string!] 2
*/
t_str = strstr(str,"test");
if(t_str != NULL)
{
DEBUG_LOG("t_str[%s] [%ld]\n",t_str,t_str - str);
}
/**
* operator_express.c string_test:162 t_str[test string!] [10]
*/
char str0[] = "This is a strtok test!!!";
char str1[] = "gnss;gess;gass;gpss";
char *sep;
sep = strtok(str0," ");
DEBUG_LOG("sep [%s]\n",sep);
while(sep != NULL)
{
sep = strtok(NULL," ");
DEBUG_LOG("sep[%s]\n",sep);
}
sep = strtok(str1,";");
DEBUG_LOG("sep [%s]\n",sep);
while (sep != NULL)
{
sep = strtok(NULL,";");
DEBUG_LOG("sep[%s]\n",sep)
}
return OK;
}