admin管理员组文章数量:1794759
assert断言与const修饰指针的妙用(模拟实现strcpy函数)
assert断言的妙用:
头文件:
#include <assert.h>
使用方法:
当我们不希望某件事情发生,直接就将该事件的判断语句放在assert()的括号内部,如果判断为真,没有发生,则代码正常运行;如果判断为假,那么直接终止程序,并且报错,assert断言的好处还在于报错时能够精准定位到哪一行出现了问题,所以程序员看到assert断言还是非常亲切的。
const修饰指针的妙用
主要用法
按照const在*左边,在*右边,可以分为两大类。
- const在*左边
限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量本身是可以改变的
比如指针p指向的内容不可以改变,但是指针p本身是谁的地址是可以改变的
- const在*右边
限制的是指针变量本身,指针变量本身是不能改变的,但是指针指向的内容是可以改变的。
比如指针p指向的内容是可以改为20的,但是指针p本身不能改变原有的指向地址a。
灵魂总结:
左定值,右定向
断言和const修饰指针的应用
讲了这么多关于断言和const修饰指针的知识,那就让我们来实践一下
模拟实现C语言strcpy函数
我们已知函数的参数有两个,将后面的字符串内容拷贝到前面去,然后返回目标空间的起始地址。
初始代码:
代码语言:javascript代码运行次数:0运行复制//模拟实现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函数,但仍然有很多细节需要注意。
- 若字符串str1,str2有空指针怎么办?
以防出现上述情况,我们可以使用断言判断这两个字符串不能为空
2.str2改变了怎么办?
可以看出,在设定这个函数时,就已经考虑到被拷贝的字符串的内容不能改变,所以就需要const来修饰指针,并且在*的左边,使得指针指向的内容不会更改。
代码语言:javascript代码运行次数:0运行复制//模拟实现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;
}
上面的代码才是最终解!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent 删除指针字符串assert变量函数本文标签: assert断言与const修饰指针的妙用(模拟实现strcpy函数)
版权声明:本文标题:assert断言与const修饰指针的妙用(模拟实现strcpy函数) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754810702a1706742.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论