#include <stdio.h> #include <stdlib.h> #include <string.h> char *str_cat(char *str1, char *str2) { assert((str1!=NULL)&&(str2!=NULL)); char *str,*tmp; str = (char *)malloc((strlen(str1)+strlen(str2)+1)*sizeof(char)); tmp = str; //保存地址 while(*str1!='\0') { //这里不能像复制函数那样写,会复制两次'\0'而导致错误 *str++ = *str1; str1++; } while(*str2!='\0') { *str++ = *str2; str2++; } return tmp; } char *str_cpy(char *dst, char *sourc) { assert((sourc!=NULL)&&(dst!=NULL)); char *tmp; tmp=dst; //保存地址 //int i=0; printf("strlen sourc:%d\n",strlen(sourc)); while((*dst++ = *sourc++ )!='\0'); //已经包含复制了'\0' return tmp; } int main() { char *str1="hello "; char *str2="world"; char *str=NULL; str = str_cat(str1,str2); printf("str_cat:%s, %d\n",str,strlen(str)); free(str); str_cpy(str,str1); printf("str_cpy:%s, %d\n",str,strlen(str)); } 结果正确,能实现复制和连接的功能。 |
|
来自: champion_xu > 《字符串》