strcpy的相关讲解:若字符串char b[100]赋值给字符串char a[100],若strlen(a)>length(b),a字符串的’\0’后也确实赋值了,但是输出的话,遇到第一个’\0’,字符串a便输出了。
下面举个例子吧:这个例子见以下链接:
blog.csdn.net/okawari_richi/article/details/57411796
例如:
· 最终答案输出是 “ABC\0”;
· 为什么答案不是"ABC\0ef";
从strcpy函数的实现代码可以看出当src指针指向为‘\0’时将会停止字符串的复制,由此可以得知返回ret指针所指向的数组a内容应该是 “ABC\0ef”,也就是说实际内存数组a中的内容应该是“ABC\0ef“;但是为什么最终显示会是"ABC\0"呢,原因在于,strcpy的本身属性:即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符;
基于此种原因,但是字符串的特性是什么呢?字符串最后一个字节存放的是一个空字符——“\0”,用来表示字符串的结束。把b复制到a之后会令b的空字符把复制后的字符串隔断,所以最终printf输出只能是"ABC\0";
strcpy的三种实现方式:
第一种:
char * strcpy(char *dst,const char *src) //[1]
{assert(dst != NULL && src != NULL); //[2]char *ret = dst; //[3]while ((*dst++=*src++)!='\0'); //[4]return ret;
}
第二种:
char *Strcpy(char *dst,char *src)
{assert(dst!=NULL&&src!=NULL);char *res=dst;do{*dst=*src; dst++;src++;}while(*(dst-1)!='\0'&&*(src)!='\0');return res;
}
第三种:
char *Strcpy(char *dst,char *src)
{assert(dst!=NULL&&src!=NULL);//if(det==NULL||src==NULL)//return NULL;char *res=dst;while(*src!='\0') {*dst=*src;//不能直接用dst=*src, 这样相当于一个数值给了指针。 //除非初始化的时候,把数值给指针才行。例如:int *a=4;//赋值类型要匹配 dst++;src++;}*dst=*src;return res;
}
strcmp函数的实现方法:
int Strcmp(const char *a,const char *b)
{while(!(*a-*b)&&*a){a++;b++;}if(*a>*b)return 1;else if(*a<*b)return -1;return 0;
}
更多推荐
函数,strcmp,strcpy
发布评论