加入CSDN是出于记录,希望有不足之处多加指正。
1、strstr(在一字符串中查找指定的字符串)
//ubuntu查找
$ man strstr
NAME
strstr, strcasestr - locate a substring
SYNOPSIS
//头文件
#include <string.h>
//定义函数
char *strstr(const char *haystack, const char *needle);
参数分析:
haystack-->需要搜索的字符串(被)
needle -->需要搜索在内容(要)
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <string.h>
char *strcasestr(const char *haystack, const char *needle);
DESCRIPTION
The strstr() function finds the first occurrence of the substring nee‐
dle in the string haystack. The terminating null bytes ('\0') are not
RETURN VALUE(返回值)
These functions return a pointer to the beginning of the located sub‐
string, or NULL if the substring is not found.
成功:返回找到的起始地址
失败:返回 NULL 0
实例代码:
char * ch1 = "hello.mp3";
char * ch2 = ".c";
char * p = strstr(ch1 ,ch2) ; //在ch1 中搜索 ch2
if(NULL == p)
{
printf("文件[%s]不是一个c源文件!\n",ch1);
}
else
{
printf("文件[%s]是一个c源文件!\n",ch1);
}
2、strlen
strlen (返回字符串长度,直到遇到结束符为止)
头文件:
#include <string.h>
定义函数:
size_t strlen (const char *s);
参数分析:
s--> 需要计算的字符串
返回值:
返回字符串的长度,不包括"\0"
实例代码:
char buf[100] = {"hello Even"};
buf[5] = '\0'; //故意在字符串中间增加一个结束符,会导致strlen计算到当前位置就结束
printf("strlen(buf):%ld\n", strlen(buf)); //计算数组中字符串的长度
printf("sizeof(buf):%ld\n". sizeof(buf)); //计算数组的大小
printf("buf:%s\n", buf); // %s 将会打印字符串直到遇到结束符为止
printf("buf+6:%s \n", buf+6); //偏移到第一个结束符后面开始打印输出
3、strtok
strtok (分割字符串)
头文件:
#include <string.h>
定义函数:
char * strtok(char *s ,const char *delim);
参数分析:
s --> 需要分割的字符串指针
delim --> 分割符号,可以有多个
返回值:
成功,下一个分割后的字符串指针
失败,返回 NULL
实例代码
char buf [100] = {"hello world,one-1"};
char * p = " ,-"; //定义了多个分隔符
char * str = strtok (buf , p); // 第一次调用strtok 必须给第一个参数
printf("%s\n" , str);
while(str = strtok(NULL , P)) //后面就不需要给第一个参数 写NULL
{
printf("%s\n ", str);
}
注意:
由strtok 的工作原理得知(该函数需要把分隔符替换成结束符),字符串 s 必须是可以被修改的。
4、strcat/strncat
strcat(连接两字符串)
头文件:
#include <string.h>
定义函数:
char * strcat(char *dest , const char *src);
参数分析:
dest --> 需要拼接到该参数后面,该参数所指向的内存必须可以被修改
src --> 需要拼接的内容
返回值:
参数 dest 的字符串起始地址
strncat (连接两字符串,安全版本)
头文件:
#include <string.h>
定义函数:
char * strncat(char * dest, const char *src,size_t n);
参数分析:
dest -->需要拼接到该参数后面,该参数所指向的内存必须可以被修改
src --> 需要拼接的内容
n --> 需要拷贝的字符长度
返回值:
参数 dest 的字符串起始地址
实例代码
char buf [100] = {"hello world,one-1"};
char * p = " ,-*abcd";
strcat(buf, p); //不推荐使用
strncat(buf, p); //推荐使用,数组长度-字符串长度 = 剩余空间
printf("buf:%s\n", buf);
5、strcpy/strncpy
strcpy (拷贝字符串)
头文件:
#include <string.h>
定义函数:
char * strcpy(char * dest, const char *src);
char * strncpy(char *dest, const char *src,size_t n);
参数分析:
dest--> 拷贝到该地址中(需要具有可写的权限)
src --> 需要拷贝的字符串
n --> 需要拷贝的字节
返回值:
返回参数 dest 的字符串起始地址
实例代码:
char buf [100] = {"hello world,one-1"};
printf();
strcpy(buf , "hell world 123");
printf("%s\n" , buf);
printf("%s\n" , buf+(strlen(buf)+1)); //strlen 求得长度不包括结束符 +1
//strcpy 只是单纯的覆盖原来地址的内容,并不会清空其他内容
char * str = malloc(5); //str 指向堆空间
//str = "hell world 123"; //str 指向数据段中的"hell world 123"
strcpy(str , "hell world 123"); //不推荐使用, 内存大小可能造成段错误
strncpy(str , "hell world 123", 5); // 推荐使用,根据用户的需求来决定拷贝内容的长度
注意:
- strcpy 只是单纯的覆盖目标地址内容,并不会修改/清空原本地值
- 一般用于给数组赋予/堆空间赋值
6、strcmp
strcmp (比较两个字符串);
头文件:
#include <string.h>
函数原型:
int strcmp (const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
参数分析:
s1--> 需要比较字符串1
s2--> 需要比较字符串2
n --> 需要比较前 n 字符
返回值:
成功:返回 0 表示两个字符串相等
失败:返回非 0 值,表示两个字符串之间的差值
小于零 表示s1的第一个差异字符比较小 (ASCII值)
大于零 表示s1的第一个差异字符比较小 (ASCII值)
实例代码
int ret_val = 0; //定义查值初始化为0
char * str1 = "hello one";
char * str2 = "hello two";
printf("str1:%p\t str2:%p\n" ,str1 , str2);
if(ret_val = strcmp(str1, str2)) //比较完整的两个字符串
{
printf("两个字符串不相等!! 差值为:%d \n", ret_val);
}
else
{
printf("两个字符串相等!! 差值为:%d \n", ret_val);
}
if(ret_val = strncmp (str1 ,str2 ,5)) //比较两个字符串的前5字节
{
printf("两个字符串前5字节不相等!! 差值为:%d \n", ret_val);
}
else
{
printf("两个字符串前5字节相等!! 差值为:%d \n", ret_val);
}
7、strchr / strrchr
strchr (查找字符串中第一个出现的指定字符,从左往右 / R 从右往左)
头文件:
#include <string.h>
定义函数:
char * strrchr (const char *s ,int c); //从右往左
char * strchr (const char *s ,int c); //从左往右
参数分析:
s --> 需要查找的字符串(被动)
c --> 需要寻找的字符串
返回值:
如果找到指定的字符串,则返回该字符所在地址。
否则返回 0 。
实例代码:
int ret_val= 0;
char * str1 = "hello one"
char chr = 'e';
char *p = NULL;
P = strchr(str , chr ); //从左往右
printf("p:%p\n" , p);
//p:0x7f2d76c007f5
P = strrchr(str , chr ); //从右往左
printf("p:%p\n" , p);
//p:0x7f2d76c007fc