admin管理员组文章数量:1487745
字符串函数(2)strcpy函数的模拟与优化
strcpy函数的解释与注意事项
- Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
- 源字符必须以‘\0’结束。
- 会将源字符串中的‘\0’拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
strcpy函数的使用
头文件<string.h>
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <string.h>
int main()
{
char ch1[20] = "abc";
char ch2[] = "abcdef";
printf("%s\n", strcpy(ch1, ch2));
return 0;
}
strcpy函数的模拟实现
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
char* my_strcpy(char* str1, char* str2)
{
char* ret = str1;
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
return ret;
}
int main()
{
char ch1[20] = "abc";//目的字符串必须足够大以确保可以放下源字符串
char ch2[] = "abcdef";
printf("%s\n", my_strcpy(ch1, ch2) );
return 0;
}
尽管这段代码可以完成任务,但是如果满分10分的情况下这个段代码只有5分。 下面我们来对这段代码进行优化吧。
优化其一
为了防止传过来空指针,我们就要运用断言(assert) 有了assert就可以有效避免空指针的出现。
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* str1, char* str2)
{
assert(str1 && str2);//有效避免空指针的危害
char* ret = str1;
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
return ret;
}
int main()
{
char ch1[20] = "abc";//目的字符串必须足够大以确保可以放下源字符串
char ch2[] = "abcdef";
printf("%s\n", my_strcpy(ch1, ch2) );
return 0;
}
优化其二
在my_strcpy中我们用的是char* my_strcpy(char* str1, char* str2)接收其实我们可以添加const在char的前方,目的是为了防止源字符串被修改。用代码表示就是:
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* str1, const char* str2)//防止源字符串被改变
{
assert(str1 && str2);//有效避免空指针的危害
char* ret = str1;
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
return ret;
}
int main()
{
char ch1[20] = "abc";//目的字符串必须足够大以确保可以放下源字符串
char ch2[] = "abcdef";
printf("%s\n", my_strcpy(ch1, ch2) );
return 0;
}
优化其三
大家知道后置++的运算规则吗。——先使用后加1,利用这个性质,我们就可以做到再一次的优化。下面看代码吧。
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* str1, const char* str2)//防止源字符串被改变
{
assert(str1 && str2);//有效避免空指针的危害
char* ret = str1;
while (*str1++=*str2++)//充分利用后置++的性质,做到代码的优化。
{
;
}
return ret;
}
int main()
{
char ch1[20] = "abc";//目的字符串必须足够大以确保可以放下源字符串
char ch2[] = "abcdef";
printf("%s\n", my_strcpy(ch1, ch2) );
return 0;
}
充分利用后置++,可以让代码得到意想不到的优化。 那么本次教学就到此为止了,我是结衣,期待你的关注,我们共同进步。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-15,如有侵权请联系 cloudcommunity@tencent 删除char函数优化指针字符串本文标签: 字符串函数(2)strcpy函数的模拟与优化
版权声明:本文标题:字符串函数(2)strcpy函数的模拟与优化 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754822245a3180033.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论