前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言重点突破(3)字符串函数与内存函数的介绍

C语言重点突破(3)字符串函数与内存函数的介绍

作者头像
对编程一片赤诚的小吴
发布2024-01-23 15:23:02
980
发布2024-01-23 15:23:02
举报

本章重点

重点介绍处理字符和字符串的库函数的使用和注意事项

前言

C语言里对字符串函数使用的特别频繁,但却没有规定字符串类型,那它在字符串里是如何存储的呢?

字符串通常放在常量字符串 中或者 字符数组 中,字符串常量适用于那些对它不做修改的字符串函数。

1.函数介绍

1 strlen

这个函数用于返回字符串的长度,在求字符串或是遍历字符串经常用来求字符串长度。

需要注意的小细节:

1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。 2.参数指向的字符串必须要以 '\0' 结束。 3.注意函数的返回值为size_t,是无符号的( 易错 )

2.strcpy

提一下,通过函数名可以大概判断该函数的用法,如cpy就是copy(复制),该函数用来进行字符串的复制

需要注意的细节:

1.源字符串必须以 '\0' 结束。 2.会将源字符串中的 '\0' 拷贝到目标空间。 3.目标空间必须足够大,以确保能存放源字符串。 4.目标空间必须可变。 

3 strcat

strcat用来将两个字符串追加到一个字符串中。

需要注意的细节:

1.源字符串必须以 '\0' 结束。 2.目标空间必须有足够的大,能容纳下源字符串的内容。 3.目标空间必须可修改

4 strcmp

strcmp函数用来将两个字符串进行比较,比较的标准是按照字符的字典序进行比较的(如a与r比较,因为根据26个字母的排序,r在a之后,所以r>a)

标准规定: 第一个字符串大于第二个字符串,则返回大于0的数字 第一个字符串等于第二个字符串,则返回0 第一个字符串小于第二个字符串,则返回小于0的数字

5 strncpy

strncpy用来拷贝num个字符从源字符串到目标空间。 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

6 strncat

和strncpy一样,前者是复制指定字节数的数据,后者则是追加指定字节数的数据。 

7 strncmp

用来比较指定字节数的字符串,比较完后返回对应的值(与strcmp一样)

8 strstr

 翻译一下:返回在字符串1中,字符串2的起始位置。这个函数用来做字符匹配。

9 strtok

 这个函数用来分割字符串,关于参数

sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标 记。 strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。) strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。 strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。 如果字符串中不存在更多的标记,则返回 NULL 指针

用一段代码演示一下

代码语言:javascript
复制
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}

在每调用一次strtok函数后,如果下一次的参数不置为NULL,它只会返回字符串中第一个标记前的字符串(标记集合不按顺序,以在字符串中的顺序为主),当你置为NULL后,才会在字符串中继续寻找下一个标记,并返回标记前的字符串。

10 strerror

该函数用来返回对应的错误信息。

2.内存函数介绍

内存函数与字符串函数的区别在于,内存函数是以内存块为单位进行调用,使得它可以作用于任意类型。

1.memcpy

函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 '\0' 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的

2.memmove

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

但如果用memcpy进行的话,会发现也可行,但多数情况下用memmove。

3.memcmp

 比较从ptr1和ptr2指针开始的num个字节

返回值如下

总结

上面这些基本上都是常用的字符串和内存函数,感兴趣的兄弟们可以自己了解,并尝试着模拟一下,关于字符串函数的模拟实现,我前面已经发了文章,关于内存函数的实现,会持续更新。 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本章重点
  • 1.函数介绍
    • 1 strlen
      • 2.strcpy
        • 3 strcat
          • 4 strcmp
            • 5 strncpy
              • 6 strncat
                • 7 strncmp
                  • 8 strstr
                    • 9 strtok
                      • 10 strerror
                      • 2.内存函数介绍
                        • 1.memcpy
                          • 2.memmove
                            • 3.memcmp
                            • 总结
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档