字符串函数的使用和刨析(上)

简介: 字符串函数的使用和刨析

目录

·求字符串长度

strlen

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

strcpy

strcat

strcmp

·长度受限制的字符串函数介绍

strncpy

strncat

strncmp

·字符串查找

strstr

strtok

·错误信息报告

strerror

·内存操作函数

memcpy

memmove

memset

memcmp


前言

C语言对字符和字符串的处理很频繁,但C语言是没有字符串类型的,字符串通常放在常量字符串中或字符数组中。字符串常量适用于那些对它不做修改的字符串函数。

·求字符串长度

strlen

C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符(\0),但不包括空结束字符(\0)。

下面是 strlen() 函数的声明。


size_t strlen(const char *str)

参数

  • str -- 要计算长度的字符串。

返回值

该函数返回字符串的长度。且该返回值是无符号整型。

模拟实现:

int my_strlen(const char* str)
{
  int count = 0;
  assert(str != NULL);
  while (*str != '\0')
  {
    count++;
    str++;
  }
  return count;
}

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

strcpy

C 库函数 char *strcpy(char *dest, const char *src)src 所指向的字符串复制到 dest

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

声明

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

参数

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。

返回值

该函数返回一个指向最终的目标字符串 dest 的指针。

模拟实现:

char* my_strcpy(char* dest, const char* str)
{
  assert(dest != NULL);
  assert(str != NULL);
  char* ret = dest;
  while (*dest++ = *str++);
  return ret;
}

strcat

C 库函数 char *strcat(char *dest, const char *src)src 所指向的字符串追加到 dest 所指向的字符串的结尾。

声明:

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

参数:

  • dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
  • src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。

返回值:

该函数返回一个指向最终的目标字符串 dest 的指针。

模拟实现:

char* my_strcat(char* dest, const char* str)
{
  assert(dest != NULL);
  assert(str != NULL);
  char* ret = dest;
  while (*dest != '\0')
  {
    dest++;
  }
  while (*dest++ == *str++);
  return ret;
}

strcmp

C 库函数 int strcmp(const char *str1, const char *str2)str1 所指向的字符串和 str2 所指向的字符串进行比较。

声明:

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

参数:

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。

返回值:

该函数返回值如下:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

模拟实现:

int my_strcmp(const char* str1, const char* str2)
{
  assert(str1 && str2);
  while (*str1 && *str2)
  {
    while (*str1 == *str2)
    {
      if (*str1 != '\0')
      {
        return 0;
      }
      str1++;
      str2++;
    }
    if (*str1 > *str2)
      return 1;
    else
      return -1;
}

·长度受限制的字符串函数介绍

strncpy

C 库函数 char *strncpy(char *dest, const char *src, size_t n)src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

声明:

char *strncpy(char *dest, const char *src, size_t n)

参数:

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。
  • n -- 要从源中复制的字符数。

返回值:

该函数返回最终复制的字符串。

strncat

C 库函数 char *strncat(char *dest, const char *src, size_t n)src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

声明:

char *strncat(char *dest, const char *src, size_t n)

参数:

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。
  • n -- 要从源中复制的字符数。

返回值:

该函数返回最终复制的字符串。

strncmp

C 库函数 int strncmp(const char *str1, const char *str2, size_t n)str1str2 进行比较,最多比较前 n 个字节。

声明:

int strncmp(const char *str1, const char *str2, size_t n)

参数:

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。
  • n -- 要比较的最大字符数。

返回值:

该函数返回值如下:

  • 如果返回值 < 0,则表示 str1 小于 str2。
  • 如果返回值 > 0,则表示 str2 小于 str1。
  • 如果返回值 = 0,则表示 str1 等于 str2。

字符串查找

strstr

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

声明:

char *strstr(const char *haystack, const char *needle)

参数:

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。

返回值:

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

模拟实现:

char* my_strstr(const char* p1, const char* p2)
{
  assert(p1 != NULL);
  assert(p2 != NULL);
  char* s1 = NULL;
  char* s2 = NULL;
  char* cur = (char*)p1;
  if (*p2 == "\0")
  {
    return (char*)p1;
  }
  while (*cur)
  {
    s1 = cur;
    s2 = (char*)p2;
    while (*s1 && *s2 && (*s1 == *s2))
    {
      s1++;
      s2++;
    }
    if (*s2 == '\0')
    {
      return cur;
    }
    cur++;
  }
  return NULL;
}
相关文章
|
7月前
|
C语言
C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
71 0
|
存储 安全 C语言
C语言—字符函数和字符串函数的模拟实现
C语言—字符函数和字符串函数的模拟实现
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
6月前
|
编译器 C语言 C++
【C语言基础】:字符函数和字符串函数-2
【C语言基础】:字符函数和字符串函数
|
6月前
|
C语言
【C语言基础】:字符函数和字符串函数-1
【C语言基础】:字符函数和字符串函数
|
6月前
|
算法 C语言
【C语言】:巧用移位操作符,位操作符解决问题
【C语言】:巧用移位操作符,位操作符解决问题
39 0
|
7月前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
72 0
|
7月前
|
存储 Unix 编译器
不可忽视的字符函数与字符串函数:它们如何改变你的编程世界
不可忽视的字符函数与字符串函数:它们如何改变你的编程世界
76 0
不可忽视的字符函数与字符串函数:它们如何改变你的编程世界
|
C语言
字符函数和字符串函数【下篇】
字符函数和字符串函数【下篇】
88 0
字符函数和字符串函数【上篇】
字符函数和字符串函数【上篇】
81 1