0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言string.h中的库函数有哪些?

冬至子 来源:小李的创客实验室 作者:初出茅庐的小李 2023-07-08 16:38 次阅读

C语言字符数组与字符串数组

在C语言中,字符数组字符串数组实际上是同一种类型。字符串是由字符组成的字符数组,通常以空字符 '\\0' 结尾。C语言中的字符串是一种常见的数据类型。我们可以通过两种方式定义字符数组跟字符串数组

char charArray[10];               // 定义一个包含10个字符的字符数组
char strArray[10] = "Hello";      // 定义并初始化一个字符串数组

常用函数之strlen()函数

strlen 是 C 语言中的一个字符串函数,用于计算字符串的长度,即字符串中字符的个数(注意它是不包括结尾的空字符 '\\0')。

函数原型如下:

size_t strlen(const char *str);

参数 str 是一个指向以空字符 '\\0' 结尾的字符串的指针。函数返回一个 size_t 类型的值,表示字符串的长度。

以下是一个使用 strlen 函数的示例代码:

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

int main(void) 
{
    char str[] = "Hello, World!";
    size_t length = strlen(str);
    printf("Length of the string: %zu\\n", length);
    return0;
}

在上述示例中,我们定义了一个字符串 str,并使用 strlen 函数计算字符串的长度,将结果保存在变量 length 中。最后,使用 printf 函数打印字符串的长度。

输出结果为:

Length of the string: 13

注意,strlen 函数返回的长度不包括结尾的空字符 '\\0'。所以对于上述示例中的字符串 "Hello, World!",虽然实际占用的字符数为 13,但 strlen 函数返回的结果是 13,而不是 14。这是因为 C 语言中的字符串以空字符 '\\0' 结尾,作为字符串的结束标志。

5个字母+1个逗号 + 1个空格 + 5个字母+1个感叹号 = 13个字节

常用函数之strcpy()函数

strcpy 是 C 语言中的一个字符串函数,用于将一个字符串复制到另一个字符串中。

函数原型如下:

char *strcpy(char *dest, const char *src);

参数 dest 是目标字符串的指针,src 是源字符串的指针。函数将源字符串的内容复制到目标字符串中,并返回指向目标字符串的指针。//后面的字符串被复制到前面的那个字符串 并返回指向的目标字符串指针

以下是一个使用 strcpy 函数的示例代码:

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

int main(void)
{
    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);
    printf("Copied string: %s\\n", dest);
    return0;
}

在上述示例中,我们定义了一个源字符串 src,内容为 "Hello",以及一个目标字符串 dest,大小为 10。使用 strcpy 函数将源字符串的内容复制到目标字符串中。最后,使用 printf 函数打印目标字符串的内容。

输出结果为:

Copied string: Hello

注意,在使用 strcpy 函数时,需要确保目标字符串的缓冲区足够大以容纳源字符串的内容。否则,可能会导致缓冲区溢出的错误。此外,确保源字符串以空字符 '\\0' 结尾,以便 strcpy 函数正确复制整个字符串。

常用函数之strcmp()函数

strcmp 是 C 语言中的一个字符串函数,用于比较两个字符串是否相等。

函数原型如下:

int strcmp(const char *str1, const char *str2);

参数 str1str2 是两个要比较的字符串的指针。函数返回一个整数值,表示比较结果的大小关系:

  • 如果 str1str2 相等,则返回 0。
  • 如果 str1 按字典顺序小于 str2,则返回负数。
  • 如果 str1 按字典顺序大于 str2,则返回正数。

什么是按照字典排序呢?

按字典顺序是一种基于字母字符的比较方式,类似于字典中单词的排列顺序。在 C 语言中,字符串的比较操作是按照字典顺序进行的。

字典顺序比较的规则如下:

  1. 比较字符串中对应位置的第一个字符。
  2. 如果两个字符不相等,那么根据它们的 ASCII 值来确定它们的大小关系。较小的字符被认为是在字典中 较早的位置较大的字符被认为是在字典中 较后的位置
  3. 如果两个字符相等,则继续比较下一个字符,直到找到不相等的字符或遇到字符串的结尾(即遇到空字符 '\\0')。
  4. 如果其中一个字符串到达结尾而另一个字符串还有剩余字符,则被认为到达结尾的字符串较小。

以下是一些示例,帮助理解按字典顺序比较字符串的结果:

  • "apple" 按字典顺序小于 "banana",因为 'a' 比 'b' 小。ASCII码值小
  • "cat" 按字典顺序大于 "dog",因为 'c' 比 'd' 大。
  • "hello" 按字典顺序等于 "hello",因为每个对应位置的字符都相等。
  • "open" 按字典顺序大于 "office",因为在第一个字符 'o' 相等的情况下,第二个字符 'p' 比 'f' 大。

需要注意的是,字母的大小比较是基于其对应的 ASCII 值进行的。在 ASCII 编码中,小写字母的 ASCII 值比大写字母的 ASCII 值大*。因此,在按字典顺序比较字符串时,大写字母会被认为是在相应小写字母之前。*

理解按字典顺序比较字符串的概念对于正确使用字符串比较函数(如 strcmp)以及处理字符串排序等操作非常重要。

以下是一个使用 strcmp 函数的示例代码:

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

int main(void) 
{
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);

    if (result == 0) 
    {
        printf("Strings are equal.\\n");
    } 
    elseif (result < 0) 
    {
        printf("str1 is less than str2.\\n");
    } 
    else
    {
        printf("str1 is greater than str2.\\n");
    }

    return0;
}

在上述示例中,我们定义了两个字符串 str1str2,分别赋值为 "Hello" 和 "World"。使用 strcmp 函数比较这两个字符串,并将结果保存在变量 result 中。然后根据比较结果打印相应的消息。

输出结果为:

str1 is less than str2.

在此示例中,由于 "Hello" 按字典顺序小于 "World",所以 strcmp 函数返回一个负数值,表明 str1 小于 str2。根据返回的结果,我们输出了相应的消息。

需要注意的是,strcmp 函数是区分大小写的。如果要执行不区分大小写的字符串比较,可以使用 strcasecmp 函数(在一些编译器中可能称为 _stricmp)。

这是在dev的string.h一段代码 它支持strcasecmp 以及_stricmp
#ifndef __CRT__NO_INLINE
  __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
  __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
#else
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif /* !__CRT__NO_INLINE */

常用函数之strcat()函数

strcat 是 C 语言中的一个字符串函数,用于将一个字符串连接到另一个字符串的末尾。

函数原型如下:

char *strcat(char *dest, const char *src);

参数 dest 是目标字符串的指针,src 是源字符串的指针。函数将源字符串的内容连接到目标字符串的末尾,并返回指向目标字符串的指针。

以下是一个使用 strcat 函数的示例代码:

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

int main(void)
{
    char str1[20] = "Hello";
    char str2[] = ", World!";

    strcat(str1, str2);
    printf("Concatenated string: %s\\n", str1);

    return0;
}

在上述示例中,我们定义了一个目标字符串 str1,大小为 20,并初始化为 "Hello"。然后,定义了一个源字符串 str2,内容为 ", World!"。使用 strcat 函数将 str2 连接到 str1 的末尾,修改了 str1 的内容。最后,使用 printf 函数打印连接后的字符串。

输出结果为:

Concatenated string: Hello, World!

strcat 函数会将源字符串的内容追加到目标字符串的末尾,并确保目标字符串以空字符 '\\0' 结尾。在示例中,str1 原先以空字符结尾,strcat 函数会将 str2 的内容从 str1 结尾处开始拷贝,覆盖掉 str1 的空字符,并在连接的末尾添加一个新的空字符。

需要注意的是,在使用 strcat 函数时,确保目标字符串的缓冲区足够大,以容纳源字符串的内容和额外的空字符。否则,可能会导致缓冲区溢出的错误。

类似这样的函数还有哪些呢?

除了这几个常见的字符串函数外,C 语言还有许多其他常用的字符串函数。以下是一些高频使用的字符串函数:

  1. strcat:用于将一个字符串连接到另一个字符串的末尾。
  2. strncat:类似于 strcat,但是可以指定要连接的字符数。
  3. strcmp:已经提到过,用于比较两个字符串是否相等。
  4. strncmp:类似于 strcmp,但是可以指定要比较的字符数。
  5. strcpy:已经提到过,用于将一个字符串复制到另一个字符串中。
  6. strncpy:类似于 strcpy,但是可以指定要复制的字符数。
  7. strchr:在字符串中搜索指定字符的第一个出现位置,并返回指向该位置的指针。
  8. strrchr:在字符串中搜索指定字符的最后一个出现位置,并返回指向该位置的指针。
  9. strstr:在字符串中搜索指定子字符串的第一个出现位置,并返回指向该位置的指针。
  10. strtok:将字符串分割成多个子字符串,使用指定的分隔符进行分割。
  11. sprintf:将格式化的数据写入字符串。
  12. sscanf:从字符串中读取格式化的数据。
  13. strlen:已经提到过,用于计算字符串的长度。
  14. memset:将指定的值复制到字符串的每个字符。
  15. memcpy:将一个字符串的内容复制到另一个字符串。

这些函数是 C 语言中处理字符串时经常使用的函数,它们提供了广泛的功能,可用于字符串操作、搜索、比较、复制等。了解和熟练使用这些函数对于处理字符串数据非常重要。建议在需要使用特定功能时,查阅相关函数的文档并参考示例代码以确保正确使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3595

    浏览量

    134153
  • C语言
    +关注

    关注

    180

    文章

    7598

    浏览量

    136188
  • ASCII
    +关注

    关注

    5

    文章

    172

    浏览量

    35047
收藏 人收藏

    评论

    相关推荐

    string.h 函数源代码

    strstr ( )/* -- C语言库函数源代码 - *//* 得到s1第一次包含s2字符串的位置指针。*/#include char * my_strstr(const char
    发表于 03-26 10:28

    string.h库和strncmp函数缺少原型

    \ main.c:278(12)缺少原型 我的include文件中有string.h文件,但我认为这还不够;],我现在该怎么办? #rtfm以上来自于谷歌翻译以下为原文 Hi, I want
    发表于 01-29 08:35

    string类型数据与《string.h》头文件的区别在哪里?

    string的含义是什么?string与vector容器的区别在哪?c的字符串是什么?string类型数据与《
    发表于 07-05 07:18

    string与《string.h哪些区别

    string与《string.h》的定义何不同?string与《string.h哪些区别?
    发表于 10-09 07:22

    string.c里相关函数介绍

    一、string.c里相关函数介绍string.h里主要包含了C语言对字符串操作的相关函数,这篇
    发表于 02-28 09:46

    如何避免rt_int8_t string.h函数时出现incompatible告警的情况

    rt_int8_t 使用string.h函数时出现incompatible告警例如:rt_int8_t str[10];rt_sprintf( str, "%05.1lf"
    发表于 10-18 10:15

    使用标准C语言库函数运行有错误应当怎么设置?

    我想使用标准 C 语言库函数,比如 memset 在 string.h 中有定义,可是我直接包含#include , 但是编译没错误,运行确有错误,应当怎么设置?
    发表于 11-18 14:51

    CodeVisionAVR C语言库函数介绍

    CodeVisionAVR C语言库函数介绍 目录:1. Character Type Functions - 字符类型函数2. Standard
    发表于 04-22 10:17 108次下载

    C语言库函数查询工具

    C语言库函数查询工具
    发表于 03-11 09:12 246次下载

    C语言库函数使用大全免费下载

    C语言库函数使用大全免费下载 函数名: abort 功 能: 异常终止一个进程 用 法: void abort(void); 程序例: #include stdio.
    发表于 11-16 11:53 468次下载

    王牌1_C语言标准库函数查询手册

    很全的C语言库函数查询手册,对初学者很有用处。
    发表于 05-18 14:26 3次下载

    C语言标准库函数

    C语言标准库函数,使用C语言编程时,常用到的函数
    发表于 05-11 16:41 0次下载

    基于C语言标准库函数

    基于C语言标准库函数
    发表于 10-23 17:41 11次下载
    基于<b class='flag-5'>C</b><b class='flag-5'>语言</b>标准<b class='flag-5'>库函数</b>

    请问C语言里strcpy具体怎么使用

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。这是
    发表于 11-29 08:54 1.1w次阅读

    单片机 keil c语言字符比较函数的使用 使用strcmp();

    单片机 keil c语言字符比较函数的使用 使用strcmp();strcmp()的介绍、32单片机的使用示例注意事项strcmp()的介绍、这是菜鸟教程的介绍:
    发表于 11-21 15:06 17次下载
    单片机 keil  <b class='flag-5'>c</b><b class='flag-5'>语言</b>字符比较<b class='flag-5'>函数</b>的使用 使用strcmp();