字符+字符串函数 二

简介: 字符+字符串函数

strtok


1.del参数是字符串,定义了用作分隔符的字符集合
2.第一个参数指定一个字符串,它包含0个或者多个由del字符集合
中一个或者多个分隔符的标记
3.strtok函数找到str中的第一个标记,并将其用'\0'结尾,
返回一个指向这个标记的指针(strtok函数会改变被操作的字符串,
在使用strtok函数切分的字符串一般都是临时拷贝的内容
4.strtok函数的一个参数不为NULL,函数将找到str中第一个标记,strtok
函数将保存它在字符串中的位置
5.strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置
开始,查找下一个标记
6.如果字符串中不存在更多的标记,则返回NULL指针

strtok函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
  const char* del = "@.";
  char arr[] = "2841460969@qq.com";
  char ch[20] = { 0 };
  strcpy(ch, arr);
  char* ret = NULL;
  for (ret = strtok(ch, del); ret != NULL; ret = strtok(NULL, del))
  {
    printf("%s\n", ret);
  }
  return 0;
}

ed8da9d74264956d359badb0d5df6782_3064b4a47c0041e687470e31e82fa0c5.png


错误信息报告


strerror


返回错误码所对应的错误信息


C语言的库函数,在执行失败时都会设置相应的错误码

例如

#include<stdio.h>
#include<string.h>
int main()
{
  printf("%s\n", strerror(0));
  printf("%s\n", strerror(1));
  printf("%s\n", strerror(2));
  printf("%s\n", strerror(3));
  return 0;
}


17a676c466b500a8422ec80b180e0bdf_de900b676b844431acb7500698250958.png

实例

errno是C语言设置的全局的错误码存放的变量

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
  FILE* p = fopen("test.c", "r");
  if (p == NULL)
  {
    printf("%s\n", strerror(errno));
  }
  return 0;
}

e5d0bb51fa6d62f2d92342df64a8471c_a959a10bd7324a91a0e4607a4d0dab0d.png

由运行结果可知,文件test.c存在


内存操作函数


memcpy-内存拷贝



1.函数memcpy从source的位置开始向后复制num个字节的数据到destination
的内存位置
2.函数在遇到'\0'时并不会停下来
3.如果source和destination有任何的重叠,复制的结果都是未知的

模拟实现memcpy

#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, int num)
{
  assert(dest && src);
  void* ret = dest;
  while (num--)
  {
    *(char*)dest = *(char*)src;
    dest = (char*)dest + 1;
    src = (char*)src + 1;
  }
  return ret;
}
int main()
{
  int arr1[] = { 1,2,3,4,5,6,7,8,9 };
  int arr2[10] = { 0 };
  my_memcpy(arr2, arr1, 20);
  return 0;
}


b702563f09cd8be396d1c2ce98a15d21_76e1d09705974207ad60fff8f3d8783c.png


memmove-可处理重叠的内存拷贝


1.与memcpy的差别是memmove函数处理的源内存块和目标内存块是可以重叠的
2.如果源空间和目标空间出现重叠,需要使用memmove函数进行处理


模拟实现memmove函数

当dest<src时,情况1 需要从前往后拷贝数据
当src<dest<src+size_num 情况2 从后往前或者从前往后均可拷贝
当src+size_num<dest 情况3 需要从后往前拷贝数据
#include<stdio.h>
#include<assert.h>
void* my_memmove(void* dest, const void* src, int num)
{
  assert(dest && src);
  void* ret = dest;
  //从前往后拷贝
  if (dest < src)
  {
    while (num--)
    {
      *(char*)dest = *(char*)src;
      dest = (char*)dest + 1;
      src = (char*)src + 1;
    }
    return ret;
  }
  //从后往前拷贝
  else
  {
    while (num--)
    {
      *((char*)dest + num) = *((char*)src + num);
    }
  }
}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  my_memmove(arr + 2, arr, 20);
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

25a85c8968b5698c0ad7009056f3de3d_f672d271e5ad4c55860d964c7897553a.png


memcmp-内存数据比较


1.比较从ptr1和ptr2只在开始的第num个字节
2.若ptr1指向的字节内容比ptr2指向的字节内容小,返回小于0的变量
若ptr1指向的字节内容和ptr2指向的字节内容相等,则继续向后比较
若ptr1指向的字节内容比ptr2指向的字节内容大,返回大于0的变量

目录
相关文章
|
3月前
|
C++
字符以及字符串函数
字符以及字符串函数
字符串函数和字符串
字符串函数和字符串
字符+字符串函数 一
字符+字符串函数
48 0
|
6月前
|
C语言
字符函数和字符串函数
字符函数和字符串函数
69 0
|
C语言 Python
字符函数和字符串函数(下)
字符函数和字符串函数(下)
53 0
字符函数和字符串函数(下)
|
11月前
|
C语言
字符函数和字符串函数(下)
字符函数和字符串函数(下)
|
11月前
|
C语言
字符函数和字符串函数(上)
字符函数和字符串函数
|
11月前
|
C语言
详解字符函数和字符串函数-2
详解字符函数和字符串函数
48 0
|
11月前
详解字符函数和字符串函数-1
详解字符函数和字符串函数
41 0