学C的第二十八天【字符串函数和内存函数的介绍(一)】-2

简介: (6). strncat()函数:追加字符串的num个字符到另一字符串函数返回值类型和相关参数:

(6). strncat()函数:追加字符串的num个字符到另一字符串

函数返回值类型和相关参数:

            char * strncat ( char * destination, const char * source, size_t num );

                 

和 strcat()函数 相同,只是参数多了个拷贝的字符个数    

注意事项:

(1).

源字符串的副本的num个字符追加到目标字符串。

目的地中的 '\0' 被源字符串的第一个字符覆盖,

并且 '\0' 会在新字符串的末尾。

和strcat()函数类似但限制了追加个数

(2).

如果源字符串的长度小于num,也只追加 源字符串 的字符串
  不会像strncpy一样补0

image.png

(7). strncmp()函数:在num个字符内比较两个字符串

函数返回值类型和相关参数:

           

int strncmp ( const char * str1, const char * str2, size_t num );

           

和 strcmp()函数 相同,只是参数多了个 限定在num个字符中比较


image.png

注意事项:

(1).

比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完

(8). strstr()函数:在字符串中找子字符串

函数返回值类型和相关参数:                      

char * strstr ( const char *str1, const char * str2);

                 

(参数接收 两个常量字符串,返回 字符指针

image.png

注意事项:

(1).

str1 中 找 str2 首次出现的地址,如果 str2 中没有 str1 返回 空指针NULL

       

(4).

学会strstr函数的模拟实现(下面第2个模块有)

(9). strtok()函数:使用自定义分隔符对字符串进行分割

函数返回值类型和相关参数:

char * strtok ( char * str, const char * sep );

                     

(参数接收 被分割的字符串首字符地址 指定的分隔符指针

返回 被分割的子字符串指针            

image.png

注意事项:

(1).

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

                 

(2).

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

(3).

strtok函数找到str中的下一个标记,并将其用 \0 结尾把找到的标记变为 \0 ),

返回一个指向这个标记的指针

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

              (4).

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

    (5).

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

               

(6).

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

       

(10). strerror()函数:将错误码以字符串形式提供出来

函数返回值类型和相关参数:

char * strerror ( int errnum );

                     

(参数接收 错误码,返回 错误码的字符串信息地址                                  

 image.png

注意事项:

(1).

库函数在执行时,发生了错误,会将一个错误码存放在 errno 这个变量中

errno C语言提供的一个全局变量

2 . 库函数的模拟实现

(1). 模拟实现strlen()函数:

方法1:计数器方式

image.png

对应代码:

#include <stdio.h>
//方法1:计数器方式
size_t my_strlen(const char* str)
  //和库函数的strlen函数一样
  //返回值为无符号整型,参数为常量字符指针
{
  int count = 0; //计数器
  while (*str != '\0')
    //还没到结束符就继续统计
  {
    count++;//没到结束符就统计+1
    str++;//判断下一位
  }
  return count;//返回计数器
}
int main()
{
  size_t sz = my_strlen("abc");
  //使用模拟实现的strlen函数返回一个size_t(无符号整数)的数
  //进行打印:
  printf("%u\n", sz);
  //%u:打印无符号的数
  return 0;
}

方法2:指针方式

88d6268609fd4c359f1bab8a535d45f2.png

对应代码:

#include <stdio.h>
//方法2:指针方式
size_t my_strlen(const char* str)
//和库函数的strlen函数一样
//返回值为无符号整型,参数为常量字符指针
{
  char* p = str;
  while (*p != '\0')
    //还没到结束符就继续统计
  {
    p++;//没指向结束符就判断下一位
  }
  return p-str;//用移动后的指针 - 原来的指针 == 字符串长度
}
int main()
{
  size_t sz = my_strlen("abc");
  //使用模拟实现的strlen函数返回一个size_t(无符号整数)的数
  //进行打印:
  printf("%u\n", sz);
  //%u:打印无符号的数
  return 0;
}

相关文章
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
39 3
|
17天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
47 6
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
323 1
|
2月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
37 0
|
2月前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
46 0
|
2月前
|
存储 C语言 C++
来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp
本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠复制,memmove处理重叠内存,memset用于填充特定值,memcmp用于内存区域比较。通过实例展示了它们的用法和注意事项。
76 0
|
2月前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
79 0
|
24天前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
200 1