当前位置:首页 > 编程笔记 > 正文
已解决

strcpy函数

来自网友在路上 149849提问 提问时间:2023-10-23 08:55:21阅读次数: 49

最佳答案 问答题库498位专家为你答疑解惑

文章目录

  • strcpy函数描述
  • 函数使用
  • 总结
  • 目标空间为什么必须可变?
  • 模拟实现

strcpy函数描述

在这里插入图片描述
重点:including the terminating null character (and stopping at that point).意为拷贝的值包括停止字符
传参时第一个参数为要拷贝参数,第二个参数为被拷贝参数

函数使用

#include<stdio.h>
#include<string.h>int main() {char str1[20] = "abcdefg";char str2[] = "zxcv";strcpy(str1, str2);printf("%s\n", str1);return 0;
}

结果:
在这里插入图片描述
拷贝之后:
在这里插入图片描述
可知在拷贝时‘\0’也被拷贝过来了。
2.
//提前结束被拷贝的字符串

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<string.h>int main() {char str1[20] = "abcdefg";char str2[] = "zxcvv\0bnm";strcpy(str1, str2);printf("%s\n", str1);return 0;
}

结果:
在这里插入图片描述
拷贝后的结果:
在这里插入图片描述

总结

1.目标空间必须足够大且可变
2.结束字符也会被拷贝过去
3源字符串必须以‘\0’结束

目标空间为什么必须可变?

错误示例:

#include<stdio.h>
#include<string.h>int main() {char* p = "abcdefg";char str2[] = "zxcv";strcpy(p, str2);printf("%s\n", *p);return 0;
}

目标字符串常量字符串不允许被修改,必须写成数组的形式

模拟实现

#include<stdio.h>
#include<assert.h>char* my_strcpy(char* dest,const char* src)
{//函数返回值为目标空间的起始地址,*dest++ = *src++会改变dest的地址,所以要先保存char* ret = dest;assert(src && dest);while (*dest++ = *src++) //加到最后先把结束字符拷贝过去,然后在判定循环是否可以再运行{;}return ret;
}int main() {char str1[20] = "xxxx";char str2[] = "abcdefghi";my_strcpy(str1, str2);printf("%s\n", str1);return 0;
}

所传参数为地址,所以两个参数都要进行判空操作,都不能为空指针

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"strcpy函数":http://eshow365.cn/6-22331-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!