【C语言】字符函数和字符串函数详解

简介: 【C语言】字符函数和字符串函数详解

1、strlen函数

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

1、功能: 返回字符串str的长度

2、注意:

  1.字符串的结束标志是’\0’ ,参数指向的字符串必须要以’\0’ 结束。

  2.strlen函数返回的是在字符串中’\0’ 前面出现的字符个数(不包含’\0’ )。

  3.注意函数的返回值为size_t,是无符号的,即不会有负数!

3、演示代码:

#include<stdio.h>
#include<string.h>
int main()
{
  char *ch = "abcdef";
  //指针ch接收的是字符串的首地址,即'a'的地址
  int len=strlen(ch);
  printf("%d", len);
  //最后打印的结果是  6
  return 0;
}

2、strcpy函数

函数原型  char * strcpy ( char * destination, const char * source );

1、功能:将字符串 source 里面的内容拷贝到 destination 里

2、返回值:destination里面字符串的首字符地址

3、注意:

  1.目标参数destination的以前内容将被覆盖并丢失。

  2.源字符串必须以’\0’ 结束。会将源字符串中的’\0’ 拷贝到目标空间。

  3.目标空间必须足够大,以确保能存放源字符串。

4、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
  char *ch = "abcdef";
  char str[20];
  strcpy(str, ch);
  //指针str接收的是字符串的首地址,即'a'的地址
  printf("%s", str);
  //打印的结果为  abcdef
  return 0;
}

3、strcat函数

函数原型  char * strcat ( char * destination, const char * source );

1、功能:将一个字符串 source 添加到另一个字符串 destination 的后面。

2、返回值:destination里面字符串的首字符地址

3、注意:

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

  2.该函数不能自己给自己追加字符串,会造成死循环。

4、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
  char str[20]="abcdef";
  char* ch = "ghijklmn";
  strcat(str, ch);
  //指针str接收的是字符串的首地址,即'a'的地址
  printf("%s", str);
  //打印结果是  abcdefghijklmn
  return 0;
}

4、strcmp函数

函数原型  int strcmp ( const char * str1, const char * str2 );

1、功能:比较两个字符串,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。

2、返回值:整数

3、注意:字符串不能用等号来比较大小,只能用strcmp函数来比!

4、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
  char *str="abcdef";
  char* ch = "abcdf";
  int ret =strcmp(str, ch);
  //'e'<'f'
  printf("%d", ret);
  //打印结果  -1
  return 0;
}

5、strncpy函数

函数原型   char * strncpy ( char * destination, const char * source, size_t num );

1、功能:将字符串 source 里面的前 num 个字符拷贝到 destination 里,这会造成 destination 前num个字符被覆盖

2、返回值:destination里面字符串的首字符地址

3、注意:

  1.该函数与 strcpy 极为相似,只是增加了拷贝的数量控制

  2.如果源字符串 source 的长度小于 num,则拷贝完源字符串之后,在目标的后边追加 ‘\0’,直到num个。

4、代码演示

#include<stdio.h>
#include<string.h>
int main()
{
  char str[20] = "abcdef";
  char* ch = "klmn";
  strncpy(str, ch,3);
  printf("%s",str);
  //打印结果  klmdef
  return 0;
}

6、strncat函数

函数原型   char * strncat ( char * destination, const char * source, size_t num );

1、功能:将一个字符串 source 前 num 个字符添加到另一个字符串 destination 的后面。

2、返回值:destination里面字符串的首字符地址

3、注意:

  1.该函数与 strcat 极为相似,只是增加了追加的数量

  2.该函数在追加完字符后,会在结尾自动补上 ‘\0’ ,所以可以自己给自己追加字符串

4、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
  char str[20] = "abcdef";
  strncat(str, str,6);
  printf("%s",str);
  //打印结果  abcdefabcdef
  return 0;
}

7、strncmp函数

函数原型   int strncmp ( const char * str1, const char * str2, size_t num );

1、功能:比较两个字符串前num个字符,按字符ASCII码值从第一个开始比较,如果str1小于str2,该函数返回一个小于零的值。如果str大于str2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。

2、返回值:整数

3、注意:该函数与 strcmp 极为相似,只是增加了追加的数量

4、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
  char* str = "abcdef";
  char* ch = "abcdf";
  int ret = strncmp(str, ch,3);
  printf("%d", ret);
  //打印结果  0
  return 0;
}

8、strstr函数

函数原型  char * strstr (char * str1, const char * str2 );

1、功能:在 str1 中查找整个 str2 字符串第1次出现的起始位置,并返回一个指向该位置的指针。如果str2并没有完整地出现在str1字符串中,函数将返回一个NULL指针,如果第2个参数是一个空字符串,函数就返回str1。

2、返回值:char*的指针

3、演示代码

#include<stdio.h>
#include<string.h>
int main()
{
    char* p1 = "abcdef";
    char* p2 = "cde";
    printf("%s", strstr(p1, p2));
    //打印结果为   cdef
    return 0;
}

9、strtok函数

函数原型  char * strtok ( char * str, const char * delimiters );

1、功能:将字符串 str 分解为一组字符串,分隔符为delimiters。

2、返回值:char*的指针

3、注意:

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

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

  3. strtok函数找到str中的一个标记,并将其用 ‘\0’ 结尾,返回一个指向这个标记的首元素指针。

  4. strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。

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

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

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

4、演示代码

  (此函数有些复杂,让我们先看结果再看代码,实际使用中不必记住上面的每一条注意,按下面代码的使用方式,使用此函数即可以,不必过于担心)

#include<stdio.h>
#include<string.h>
int main()
{
    //要切割的字符串
    char str[30] = "3107131629@qq.com";
    //切割符号    本例中是 @  与 .
    char* p2 = "@ .";
    printf("%s\n", strtok(str, p2));
    //注意第二次切割时,第一个参数(要切割的字符串)变为NULL
    //因为上面的 注意5. 注意6. 说明此函数有记忆效应!
    printf("%s\n", strtok(NULL, p2));
    //类似第二次,第一个参数变为NULL
    printf("%s\n", strtok(NULL, p2));
    return 0;
}

以后我们使用 strtok 函数可以类似上面的代码中对此函数的使用方式

10、strerror函数

  在介绍此函数之前先介绍一下 错误码,例如常见的 404错误 就是一个错误码,错误码记录了出现错误的原因。

  C语言中有一个隐藏的全局变量 errno,使用此全局变量必须先要引用头文件 ‘’#include <errno.h>‘’,该全局变量记录了程序使用中的出现错误的错误码,但是错误码我们看不懂,需要经过函数翻译才能看懂。

函数原型   char * strerror ( int errno );

1、功能:返回错误码,所对应的错误信息。

2、返回值:char*的指针,该指针指向了一句英文字符串,该英文就是错误原因

3、注意:要引用头文件 ‘’#include <errno.h>‘’

4、演示代码

  如果你为初学者看不懂此代码,那无所谓,体会此函数的作用即可

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
    //读文件
    FILE* pf = fopen("test.txt", "r");
    //我当前目录没有 test.txt文件,故此代码错误,pf=NULL
    if (pf == NULL)
    {
        printf("%s\n", strerror(errno));
        return -1;
    }
    //关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}

此条英文就是错误原因


好了,关于字符函数和字符串函数的一些知识点就分享到这儿了,如果本篇文章有错误的地方或者不清楚的地方,可以在评论区随时留言或者私信给我哦!byebye

相关文章
|
5天前
|
存储 C语言
向函数传递结构体: C语言中的结构体参数传递详解
向函数传递结构体: C语言中的结构体参数传递详解
18 0
|
5天前
|
C语言
C语言中返回指针值的函数
C语言中返回指针值的函数
15 0
|
21小时前
|
C语言 存储 编译器
C语言函数大全--a开头的函数
【6月更文挑战第1天】本篇介绍 C语言中 a开头的函数【C语言函数大全】
11 2
C语言函数大全--a开头的函数
|
2天前
|
C语言
malloc()函数
`malloc()`是C语言中的动态内存分配函数,用于分配指定大小的内存块,并返回一个`void*`类型的指针。要包含`stdlib.h`头文件来使用它。分配的内存大小以字节为单位,成功则返回内存首地址,失败则返回`NULL`。需要注意的是,返回的指针需强制转换为所需类型,并在使用后用`free()`释放内存,避免内存泄漏。切勿在分配区域内移动指针,以防止释放时出现问题。
|
3天前
|
Serverless C语言
C语言函数详解与实战应用
C语言函数详解与实战应用
9 1
|
3天前
|
算法 C语言
C语言函数递归调用详解与实战应用
C语言函数递归调用详解与实战应用
11 0
|
3天前
|
C语言
C语言函数的嵌套调用详解
C语言函数的嵌套调用详解
9 1
|
5天前
|
存储 C语言
向函数传递字符串: C语言中的技术与实践
向函数传递字符串: C语言中的技术与实践
14 0
|
5天前
|
程序员 C语言
使用指针变量作为函数参数的C语言程序实例
使用指针变量作为函数参数的C语言程序实例
14 0
|
5天前
|
存储 C语言 索引
C语言字符数组深入解析与应用实例
C语言字符数组深入解析与应用实例
12 0