strcpy的相关讲解:若字符串char b[100]赋值给字符串char a[100],若strlen(a)>length(b),a字符串的’\0’后也确实赋值了,但是输出的话,遇到第一个’\0’,字符串a便输出了。
下面举个例子吧:这个例子见以下链接:
https:///okawari_richi/article/details/57411796
例如:
从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;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务