【C语言】—— 字符串&内存函数(详解)(1)

简介: 【C语言】—— 字符串&内存函数(详解)(1)

一、长度不受限制的字符串函数

1.strlen函数

字符串以‘\0’作为结束标志,strlen函数返回的是字符串前面出现的字符个数


函数原型:size_t strlen( const char *string );


头 文 件 :<string.h>


函数功能:计算字符串的长度;


注意事项:1.定义的字符串必须要包含'\0'

char arr1[] = "abcd";/*正确*/
char arr2[] = { 'a', 'b', 'c', 'd' };/*错误*/

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[] = "ABCD";//里面包含\0
  char str2[] = { 'A','B','C','D' };//里面不包含\0
  printf("%d\n", strlen(str1));
  printf("%d\n", strlen(str2));
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

2.strcpy函数

函数原型:char *strcpy( char *strDestination, const char *strSource );


头 文 件 :<string.h>


函数功能:字符串拷贝;它是连同'\0'一起拷贝过去;


参数解读:


                 1.char *strDestination --- 目标字符串


                 2.const char *strSource  --- 源字符串(不可被修改)


                 3.返回类型:char* --- 返回的是拷贝后源字符串的地址


注意事项:


               1.拷贝时源字符串中一定要包含\0;


               2.拷贝时目标空间要足够大,保证放的下要拷贝过去的字符串;


               3.拷贝时目标空间必须可修改(不能被const修饰);

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[20] = "xxxxxxx";//目标空间要足够大
  char str2[] = "Hello World";
  printf("拷贝前为:%s\n", str1);
  strcpy(str1, str2);
  printf("拷贝后为:%s\n", str1);
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

3.strcat函数

函数原型:char *strcat( char *strDestination, const char *strSource );


头 文 件 :<string.h>


函数功能:字符串连接(追加):它是连同'\0'一起追加过去;


参数解读:


                 1.char *strDestination --- 目标字符串


                 2.const char *strSource  --- 源字符串(不可被修改)


                 3.返回类型:char* --- 返回的是拷贝后源字符串的地址


注意事项:


                1.追加时源字符串中一定要包含\0


                2.追加时目标空间要足够大,保证放的下要追加过去的字符串


                3.追加时目标空间必须可修改(不能被const修饰)


                4.自己不能给自己追加(需要使用strncat)

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[20] = "Hello ";//目标空间要足够大
  char str2[] = "World";
  printf("追加前为:%s\n", str1);
  strcat(str1, str2);
  printf("追加后为:%s\n", str1);
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

4.strcmp函数

函数原型:int strcmp( const char *string1, const char *string2 );


头 文 件 :<string.h>


函数功能:字符串比较:比较的是ASSIC码值;比较的是内容而不是长度;


参数解读:


                 1.string1 --- 被比较的字符串;


                 2.string2 --- 待比较的字符串;


比较方法:


                 1.当 str1 < str2  返回负数


                 2.当 str1 = str2  返回0


                 3.当 str1 > str2  返回正数  

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[] = "ABCD";
  char str2[] = "ABCE";
  int ret = strcmp(str1, str2);
  if (ret > 0)
  {
    printf("ret=%d:str1>str2\n", ret);
  }
  else if (ret < 0)
  {
    printf("ret=%d:str1<str2\n", ret);
  }
  else
  {
    printf("ret=%d:str1=str2\n", ret);
  }
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

二、 长度受限制的字符串函数

1.strncpy函数

函数原型:char *strncpy( char *strDest, const char *strSource, size_t count );


头 文 件 :<string.h>


函数功能:字符串拷贝:可以指定拷贝字符的个数;


参数解读:


                 1.char *strDest --- 目标字符串


                 2.const char *strSource  --- 源字符串(不可被修改)


                 3.size_t count --- 指定拷贝多少个字符


                 4.返回类型:char* --- 返回的是拷贝后源字符串的地址


注意事项:


                 1.拷贝时:当拷贝的个数大于源字符串长度时(比如源字符串“abcd”,拷贝6个),不够的用\0补(设置个数时要合理)


                 2.拷贝时目标空间要足够大,保证放的下要拷贝过去的字符串


                 3.拷贝时目标空间必须可修改(不能被const修饰)举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char dest[20] = "xxxxxxx";
  char src[] = "Hello World";
  printf("拷贝前为:%s\n", dest);
  strncpy(dest, src,5);
  printf("拷贝后为:%s\n", dest);
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

#include <stdio.h>
#include <string.h>
int main()
{
  char dest[20] = "xxxxxxxxxx";
  char src[] = "abcd";
  printf("拷贝前为:%s\n", dest);
  strncpy(dest, src, 6);
  printf("拷贝后为:%s\n", dest);
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

2.strncat函数

函数原型:char *strncat( char *strDest, const char *strSource, size_t count );


头 文 件 :<string.h>


函数功能:字符串追加:可以指定追加字符的个数;


参数解读:


                 1.char *strDest --- 目标字符串


                 2.const char *strSource  --- 源字符串(不可被修改)


                 3.size_t count --- 指定追加多少个字符


                 4.返回类型:char* --- 返回的是拷贝后源字符串的地址


注意事项:


                 1.追加时:当追加的个数小于源字符串的个数时,会主动追加'\0'


                 2.追加时:当追加的个数大于源字符串的个数时,库函数的定义是只追加到'\0'位置,所以个数就算很大并不影响


                 3.追加时目标空间必须可修改(不能被const修饰)

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char dest[20] = "Hello ";
  char src[] = "World";
  printf("追加前为:%s\n", dest);
  strncat(dest, src, 4);
  printf("追加后为:%s\n", dest);
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

3.strncmp函数

函数原型:int strncmp( const char *string1, const char *string2, size_t count );


头 文 件 :<string.h>


函数功能:字符串比较:可以指定比较字符的个数;


参数解读:


                 1.string1 --- 被比较的字符串;


                 2.string2 --- 待比较的字符串;


                 3.size_t count --- 指定 比较多少个字符 (从前向后比较)


比较方法:


                 1.当 str1 < str2  返回负数


                 2.当 str1 = str2  返回0


                 3.当 str1 > str2  返回正数  

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[] = "ABCD";
  char str2[] = "ABCE";
  int ret = strncmp(str1, str2,3);
  if (ret > 0)
  {
    printf("ret=%d:str1>str2\n", ret);
  }
  else if (ret < 0)
  {
    printf("ret=%d:str1<str2\n", ret);
  }
  else
  {
    printf("ret=%d:str1=str2\n", ret);
  }
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

三、其他字符串函数

1.strstr函数

函数原型:char *strstr( const char *string, const char *strCharSet );


头  文  件:<string.h>


函数功能:字符串查找:在string中查找strCharSet是否存在;


参数解读:


                 1.string --- 被搜索的以空结尾的字符串;


                 2.strCharSet --- 要搜索的以空结尾的字符串;


注意事项:


                 1.当找到时:返回一个指针 strCharSet 在string中第一次出现的那个位置;


                 2.未找到时:返回一个空指针(NULL);

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[] = "ABCD";
  char str2[] = "BC";
  char str3[] = "HaHa";
  if (strstr(str1, str2) != NULL)
  {
    printf("找到了\n");
  }
  else
  {
    printf("找不到\n");
  }
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png

2.strtok函数

函数原型:char *strtok( char *strToken, const char *strDelimit );


头  文  件:<string.h>


函数功能:字符串切分


功能:


       1.sep参数是个字符串,定义了用作分隔符的字符集合


       2.第一个参数指定一个字符,它包含0个或多个由sep字符串中一个或多个分隔符分割的标记


1ecd1b2606ed46e9956a89f231c9802c.png


       3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)


       4.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。


       5.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。


       6.如果字符串中不存在更多的标记,则返回 NULL 指针

举例:

#include <stdio.h>
#include <string.h>
int main()
{
  char arr1[] = "zhangsan@school.student";
  char arr2[100] = { 0 };
  char sep[] = "@.";
  strcpy(arr2, arr1);
  char* ret = NULL;
  for (ret = strtok(arr2, sep); ret != NULL;ret=strtok(NULL,sep))
  {
    printf("%s\n", ret);
  }
  return 0;
}

1ecd1b2606ed46e9956a89f231c9802c.png


目录
相关文章
|
5天前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
5天前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
|
8天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
8天前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
8天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
13天前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
4月前
|
存储 C语言
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
136 3
|
3月前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
|
4月前
|
存储 C语言
C语言中向函数传递值和从函数返回值的技术解析
C语言中向函数传递值和从函数返回值的技术解析
46 0
|
10月前
|
C语言
C语言---函数---知识点总结(三)------函数的返回值类型
C语言---函数---知识点总结(三)------函数的返回值类型