strcpy函数详解看这一篇就够了 |
您所在的位置:网站首页 › c语言中char的用法举例 › strcpy函数详解看这一篇就够了 |
首先要明确strcpy的功能是:将参数src字符串拷贝至参数dest所指的地址
目录 函数介绍 与strncpy的区别 函数实现1: 函数实现2 改进: 用法示例: 函数介绍函数原型: char*strcpy(char*dest,const char*src) //将src复制到dest字符数组中 头 文 件:#include 返 回 值:char* 类型,返回的是第一个参数的值,即目的数组的首地址; 注 意: 1、strcpy只用于字符串复制,遇到‘\0’时停止,还会复制字符串的结束符'\0'; 所以源字符串必须 以’\0’结束,也会将源字符串的’\0’拷贝到目标空间 2、目标空间必须可变 3、如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况,在编写程序时需特别 留意,或者用strncpy()来代替 与strncpy的区别1、strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数n 大家可以对比一下两个函数原型: char *strcpy(char *dest, const char *src); char * strncpy(char *dest, const char *src, size_t n); 2、不像strcpy(),strncpy()不会向dest追加结束标记'\0' 函数实现1: char* My_strcpy(char* dest, char* src) { char* ret = dest; //将首地址储存,在之后dest后置++运算中,可以方便找到 while (*src != '\0') //复制'\0'前的字符,直到src=\0 { *dest = *src; //复制 dest++; //目标地址往后+1 src++; //源地址往后+1 } *dest = *src; //再将结尾的‘\0’复制过去 return ret; //返回目的数组的首地址 }这样就好了吗? 函数实现2 改进:我们可以进行以下改进: 1、可以将while中的语句整合一下 2、引用assert函数来避免:若传过去的是空指针,那么解引用的时候,没有可读取的地址,会出现错误。 3、对比声明,我们还有const char*可以替换 //加上conest使要拷贝的字符数组中存放的字符串不可改变,同时防止拷贝时出现"拷贝反了"的现象 char* My_strcpy(char* dest,const char* src) { assert(dest != NULL && src != NULL); char* ret = dest; while (*dest++ = *src++) { ; } *dest = *src; return ret; } 用法示例: #include #include #include char* My_strcpy(char* dest, const char* src) { assert(dest != NULL && src != NULL); char* ret = dest; while (*dest++ = *src++) { ; } *dest = *src; return ret; } int main() { char arr1[] = "I LOVE YOU"; char arr2[] = "SORRY"; My_strcpy(arr1, arr2); //经过函数My_strcpy后 ,arr1里应该是arr2里的字符串SORRY printf("arr1: %s\n", arr1); return 0; } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |