admin 管理员组文章数量: 887031
2023年12月23日发(作者:perl数组是什么)
C语言字符串复制函数strcpy()的编写与详解
strcpy,即string copy(字符串复制)的缩写。
原型声明:char *strcpy(char *dest, const char *src);
头文件:#include
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针(返回类型char*)。
不使用C/C++标准库函数,进行字符串复制函数的编写:
#include
void stringcpy(char* to, const char* from) {
assert(to != NULL && from != NULL);
while (*from != '0') {
*to++ = *from++;
}
*to = '0';}
int main(void) {
char* t = (char*)malloc(15);
char* f = (char*)malloc(15);
stringcpy(f, "abcdefg");
stringcpy(t, f);
printf("%sn", t);
printf("%cn", t[0]);
free(t);
free(f);
getchar();
return 0;}
•
运行结果:
详解:
① assert宏的原型定义在
② *to++ = *from++先赋值再各自自增。
*p++先执行++再执行*,分三步(*和++都是同级运算符,右结合)
(1)先执行p++,因为是后置,先用p;
(2)再执行 *p, 取p所指的内容;
(3)最后再让p++,让p的地址加一个单位。
注意:++*p和(*p)++都是取p所指对象的值加1。
③ *to = '0'补上结束符,否则会乱码,如图。
④ char* t = (char*)malloc(15)使用 malloc 向堆动态申请内存;由于 malloc 返回类型为(void*),故用(char*)转换类型;char 为字符型变量,占1字节,此处申请了15字节的内存空间。
注意:若已不再使用,需要用 free 手动释放由 malloc 申请的内存,防止内存泄漏。
⑤ sizeof(t)的结果为4,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位),对于32位编译器,char*占4字节。
⑥ strlen(t)的结果为7,strlen() 截取'0'之前的字符串长度,其头文件为
⑦ getchar()类似于C++中的system("pause"),用于生成运行结果后暂停,方便查看结果,否则运行窗口会一闪而过,输入回车后即可关闭窗口。
版权声明:本文标题:c语言字符串复制函数strcpy 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703303540h446149.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论