assert断言与const修饰指针的妙用(模拟实现strcpy函数)

简介: assert断言与const修饰指针的妙用(模拟实现strcpy函数)

assert断言的妙用:

头文件:

#include <assert.h>

使用方法:

我们不希望某件事情发生,直接就将该事件的判断语句放在assert()的括号内部,如果判断为真,没有发生,则代码正常运行;如果判断为假,那么直接终止程序,并且报错,assert断言的好处还在于报错时能够精准定位到哪一行出现了问题,所以程序员看到assert断言还是非常亲切的。

const修饰指针的妙用

主要用法

按照const在*左边,在*右边,可以分为两大类。

  • const在*左边

限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量本身是可以改变的

比如指针p指向的内容不可以改变,但是指针p本身是谁的地址是可以改变的

  • const在*右边

限制的是指针变量本身,指针变量本身是不能改变的,但是指针指向的内容是可以改变的。

比如指针p指向的内容是可以改为20的,但是指针p本身不能改变原有的指向地址a。

断言和const修饰指针的应用

讲了这么多关于断言和const修饰指针的知识,那就让我们来实践一下

模拟实现C语言strcpy函数

我们已知函数的参数有两个,将后面的字符串内容拷贝到前面去,然后返回目标空间的起始地址

初始代码:

//模拟实现strcpy函数
char* my_strcpy(char* str1, char* str2)
{
  char* ret = str1;
  while (*str1++ = *str2++)
    ;
  return ret;
}
int main()
{
  char arr1[20] = "*****************";
  char arr2[] = "i love jing";
  //strcpy(arr1, arr2);
  my_strcpy(arr1, arr2);
  printf("%s\n", arr1);
  printf("%s\n", my_strcpy(arr1,arr2));
  return 0;
}

上面的代码初步实现了strcpy函数,但仍然有很多细节需要注意。

  1. 若字符串str1,str2有空指针怎么办?

以防出现上述情况,我们可以使用断言判断这两个字符串不能为空

    2.str2改变了怎么办?

可以看出,在设定这个函数时,就已经考虑到被拷贝的字符串的内容不能改变,所以就需要const来修饰指针,并且在*的左边,使得指针指向的内容不会更改。

//模拟实现strcpy函数
#include<assert.h>
char* my_strcpy(char* str1,const char* str2)//const修饰被拷贝的字符串
{
  assert(str1 != NULL);//断言判断
  assert(str2 != NULL);//断言判断
  char* ret = str1;
  while (*str1++ = *str2++)
    ;
  return ret;
}
int main()
{
  char arr1[20] = "*****************";
  char arr2[] = "i love jing";
  //strcpy(arr1, arr2);
  my_strcpy(arr1, arr2);
  printf("%s\n", arr1);
  printf("%s\n", my_strcpy(arr1,arr2));
  return 0;
}

上面的代码才是最终解!

相关文章
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
66 4
|
3月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
3月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
3月前
利用指针函数
【10月更文挑战第2天】利用指针函数。
26 1
|
3月前
|
算法 搜索推荐 C语言
【C语言篇】深入理解指针4(模拟实现qsort函数)
【C语言篇】深入理解指针4(模拟实现qsort函数)
30 2
|
3月前
|
C++
魔法指针 之 assert断言 传址调用 传值调用
魔法指针 之 assert断言 传址调用 传值调用
31 0
|
4月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
5月前
|
程序员 C语言
指针在函数参数和返回值中的使用
指针在函数参数和返回值中的使用
86 9
|
5月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
5月前
|
编译器
【Bug记录】C2662:不能将this指针从const转换为非const
【Bug记录】C2662:不能将this指针从const转换为非const