0
点赞
收藏
分享

微信扫一扫

strcpy函数进阶学习——strcpy代码优化从面试五分提升到高分

在c语言库中,函数strcpy可以实现字符串的复制,当然我们也可以通过代码的方式实现,今天我给大家介绍实现strcpy功能代码的优化过程。

代码1:

#include <stdio.h>

void my_strcpy(char* dest, char* src)
{
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
}

int main()
{
char arr1[] = "########";
char arr2[] = "bit";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}

在这个代码中我们可以简单的实现字符串的复制功能,定义my_strcpy函数时,代码有缺点:​实现效率低和占总内存空间大​。

优化1:

#include <stdio.h>

void my_strcpy(char* dest, char* src)
{
while (*dest++=*src++)
{
;
}
}

int main()
{
char arr1[] = "########";
char arr2[] = "bit";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}

经过这次优化,我们可以通过*dest++=*src++的循环设置实现字符串的复制,并且在​最后一次循环中,代码可以巧妙地实现赋值’\0‘并停止循环​。

优化2:

#include <stdio.h>
#include <assert.h>

void my_strcpy(char* dest, char* src)
{
assert(dest != NULL);
assert(src != NULL);
while (*dest++ = *src++)
{
;
}
}

int main()
{
char arr1[] = "########";
char arr2[] = "bit";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}

经过这次优化,在代码中加入断言(assert),可以让代码具有报错运行停止的功能。​如果我们在传参时传入的是NULL(空指针),代码会报错停止。

优化3:

#include <stdio.h>
#include <assert.h>

void my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
while (*dest++ = *src++)
{
;
}
}

int main()
{
char arr1[] = "########";
char arr2[] = "bit";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;

经过这次优化,我们在char* src前加 const修饰,​会让char* src值无法被改变。如果我们在输入代码时搞错dest 和src的位置,代码会运行错误。

优化四:

#include <stdio.h>
#include <assert.h>

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

int main()
{
char arr1[] = "########";
char arr2[] = "bit";
printf("%s\n", my_strcpy(arr1, arr2));
return 0;
}

通过查阅strcpy函数的相关资料,我们可以发现strcpy的定义方式以及返回值,这次的优化会让我们的代码更加健壮。

strcpy函数进阶学习——strcpy代码优化从面试五分提升到高分_strcpy等效实现

浅浅地看一下运行结果ba:

strcpy函数进阶学习——strcpy代码优化从面试五分提升到高分_strcpy优化_02

举报

相关推荐

0 条评论