C标准库-- string.h

前言

2020年6月毕业,实习期间,在我第一次接触公司的业务代码之后,我感觉自己之前学了假的C语言,那种C语言仅仅停留在,switch,case,if,else循环以及一些简单的结构体的应用,

到了公司,学校学习的代码,连最简单的业务代码看起来都是超级的费劲,带我的老师,推荐我学习C菜鸟教程,进行C语言的强化。这些框架是来在C菜鸟教程。

附上菜鸟教程的连接: link. C菜鸟教程,点击link即可跳转。

"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"
"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"

简介

<string.h>库: string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

库变量

下面是头文件 string.h 中定义的变量类型:

size_t 
这是无符号整数类型,它是 sizeof 关键字的结果

库宏

下面是头文件 string.h 中定义的宏:

NULL
这个宏是一个空指针常量的值。

库函数

下面是头文件 String.h 中定义的22个函数

1.	void *memchr(const void *str, int c, size_t n);  
2.	int   memcmp(const void *str1, const void *str2, size_t n);
3.  void *memcpy(void *dest, const void *src, size_t n);
4.  void *memmove(void *dest, const void *src, size_t n);
5.  void *memset(void *str, int c, size_t n)
6.	char *strcat(char *dest, const char *src)
7.  char *strncat(char *dest, const char *src, size_t n)
8.  char *strchr(const char *str, int c)
9.  int   strcmp(const char *str1, const char *str2)
10. int strncmp(const char *str1, const char *str2, size_t n)
11. int strcoll(const char *str1, const char *str2)
12. char *strcpy(char *dest, const char *src)
13. char *strncpy(char *dest, const char *src, size_t n)
14. size_t strcspn(const char *str1, const char *str2)
15. char *strerror(int errnum)
16. size_t strlen(const char *str)
17. char *strpbrk(const char *str1, const char *str2)
18. char *strrchr(const char *str, int c)
19. size_t strspn(const char *str1, const char *str2)
20. char *strstr(const char *haystack, const char *needle)
21. char *strtok(char *str, const char *delim)
22. size_t strxfrm(char *dest, const char *src, size_t n)

1.void *memchr(const void *str, int c, size_t n)
在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
2 int memcmp(const void *str1, const void *str2, size_t n)
把 str1 和 str2 的前 n 个字节进行比较。
3 void *memcpy(void *dest, const void *src, size_t n)
从 src 复制 n 个字符到 dest。
4 void *memmove(void *dest, const void *src, size_t n)
另一个用于从 src 复制 n 个字符到 dest 的函数。
5 void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
6 char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
7 char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
8 char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
9 int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
10 int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字节。
11 int strcoll(const char *str1, const char *str2)
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
12 char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest。
13 char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
14 size_t strcspn(const char *str1, const char *str2)
检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
15 char *strerror(int errnum)
从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。
16 size_t strlen(const char *str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
17 char *strpbrk(const char *str1, const char *str2)
检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
18 char *strrchr(const char *str, int c)
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
19 size_t strspn(const char *str1, const char *str2)
检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
20 char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
21 char *strtok(char *str, const char *delim)
分解字符串 str 为一组字符串,delim 为分隔符。
22 size_t strxfrm(char *dest, const char *src, size_t n)
根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中

"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"
"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"********"我是分割线"

1.void*memchr()

声明
下面是 memchr() 函数的声明。

void *memchr(const void *str, int c, size_t n)

函数描述
在参数 str 所指向的字符串的 前 n 个 字节中,搜索第一次出现字符 c(一个无符号字符)的位置。

参数:

  1. str–>指向要执行搜索的内存块
  2. c --> 以int形式传值,函数在搜索时,使用的是该值的无符号字符形式
  3. n–>要被分析的字节数

返回值:
该函数返回一个指向匹配字节的指针.
如果在给定的内存区域未出现字符,则返回 NULL.

实例

int main()
{
	const char str[] = "Beijing_龙田华远.陈旭.加油  chenxu 2020-5-20 !";
	const char ch1 = '.';
	const char ch2 = 'c';
	char *ret;
	ret = (char*)memchr(str, ch1, strlen(str));
	printf("%c 之后的字符串是--> %s \n", ch1, ret);
	
	ret = (char*)memchr(str, ch2, strlen(str));
	printf("%c 之后的字符串是--> %s \n", ch2, ret);
	return(0);
}

输出的结果为:

. 之后的字符串是--> .陈旭.加油  chenxu 2020-5-20 ! 
c 之后的字符串是--> chenxu 2020-5-20

memchr的实现:

void *memchr(const void *buf, int c, unsigned int count)     
{     
    assert(buf != NULL);     
    while (count --)     
    {     
        if (*(char *) buf == c)     
            return (void *) buf;     
        buf = (char *) buf + 1;     
    }     
    return NULL;     
} 

小结:相当于把指针,指向了字符串的首次出现对比字符的位置。

2.int memcmp()

声明
下面是 memcmp() 函数的声明。

void *memchr(const void *str, int c, size_t n)

函数描述:把存储区 str1 和存储区 str2 的前 n 个字节进行比较。

参数
str1 – 指向内存块的指针。
str2 – 指向内存块的指针。
n – 要被比较的字节数。

返回值
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

3.void *memcpy()

声明
下面是 memcpy() 函数的声明。

void *memcpy(void *str1, const void *str2, size_t n)

描述
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。

参数
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
n – 要被复制的字节数。

返回值
该函数返回一个指向目标存储区 str1 的指针。

4.void *memmove()

声明
下面是 memmove() 函数的声明。

void *memmove(void *str1, const void *str2, size_t n)

描述
从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

参数
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
n – 要被复制的字节数。

返回值
该函数返回一个指向目标存储区 str1 的指针。

5.void *memset()

描述
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

声明
下面是 memset() 函数的声明。

void *memset(void *str, int c, size_t n)

参数
str – 指向要填充的内存块。
c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n – 要被设置为该值的字节数。
返回值
该值返回一个指向 存储区 str 的指针。
实例
下面的实例演示了 memset() 函数的用法。

#include <stdio.h>
#include <string.h>
int main ()
{
   char str[50];
   strcpy(str,"This is string.h library function");
   puts(str);
   memset(str,'$',7);
   puts(str);  
   return(0);
}

让我们编译并运行上面的程序,这将产生以下结果:

This is string.h library function
$$$$$$$ string.h library function

6.char* strcat()

7.char *strncat()

8.char *strchr()

9.int strcmp()

10.int strncmp()

11.int strcoll()

12.char *strcpy()

13.char *strncpy()

14.size_t strcspn()

15. char *strerror()

C 库函数 - strerror()
C 标准库 - <string.h> C 标准库 - <string.h>

描述
C 库函数 char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。

声明
下面是 strerror() 函数的声明。

char *strerror(int errnum)
参数
errnum – 错误号,通常是 errno。
返回值
该函数返回一个指向错误字符串的指针,该错误字符串描述了错误 errnum。

实例
下面的实例演示了 strerror() 函数的用法。

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main ()
{
FILE *fp;

fp = fopen(“file.txt”,“r”);
if( fp == NULL )
{
printf(“Error: %s\n”, strerror(errno));
}

return(0);
}
让我们编译并运行上面的程序,这将产生以下结果,因为我们尝试打开一个不存在的文件:

Error: No such file or directory

16.size_t strlen ()

17.char *strpbrk()

18.chr *strchr()

19.size_t strspn()

20.char *strstr()

21.size_t strxfrm()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值