strcpy源码
1. 这段代码有什么问题
原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
给一个很经典版本的strcpy函数源码:
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ )
NULL ;
return address ;
}
你的b溢出了。把长度改成6,或者……这样写:
char b[]="china";
这样写也可以。
2. 如何使用strcpy()函数
这个就是字符串复制的字思!
strcpy(字符串一,字符串二);就是把字符串一的内容复制给字符串二!
字符串一,二也可以用字符串数组名代替!
3. strcpy函数可以不返回指针吗解决了追加分,
先汗一个,strcpy函数是一个库函数,他就在哪里,不会因为你的意愿而改变。除非你不用这个库函数,自己写一个
我明白你的意思,你是想问既然这个函数有返回值为什么你这个程序的strcpy(name,na);没有接受返回值是吧?先说第一点,函数有返回值没人强逼你接受,你首先要明白函数的返回值是干什么的,这个返回值对你有用没,你有必要浪费一块内存来存这个返回值没。
strcpy的功能是复制第二个参数内容到第一个参数中(第一个参数必须有足够的内存来接受第二个参数)然后返回第一个参数的地址。你这个程序中第一个参数的地址是你的私有变量name,既然已经有了当然没必要再存了。
当然,本人一直以为这个返回值没用,我以前看过林锐的书,他介绍过这个函数为什么要返回值,我记得他好像是说这个返回值没什么用,只是让程序设计更灵活才这样用的。所以一般不用理他这个返回值。另外据说这个是strcpy的源码:
/***
*char *strcpy(dst, src) - one string over another
*
*Purpose:
* Copies the string src into the spot specified by
* dest; assumes enough room.
*
*Entry:
* char * dst - string over which "src" is to be copied
* const char * src - string to be copied over "dst"
*
*Exit:
* The address of "dst"
*
*Exceptions:
*******************************************************************************/
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
超级简单,看一下你就明白了
4. 菜鸟关于strcpy的疑问。。。。。。。。
因为c语言中的字符串末尾隐含了一个结束符'\0',p的实际值是how are you ?'\0',strcpy时,末尾的'\0'也被写到name里去了,覆盖掉了ABCDEFGHIJKLMN,后面的OPQRS确实还在,但printf看到第14个字符是'\0'时,就认为前面13个字符how are you ?是一个完整的字符串了。
5. 编写函数实现strcpy功能,内有详细要求(已有源代码,需改正)
#include<iostream.h>
char *ZhanJie(char *a,char *b)//衔接函数
{
char *a1=a;
while((*a1)!='\0')//到达指定衔接位置
{
//调试语句cout<<"循环次数"<<endl;
a1++;
}
while( (*a1++ = *b++) != '\0' );//开始衔接
return a;
}
void main()
{
//要在m后写数据,m空间不够或为只读属性时,程序会出错的.
char *m=(char*)malloc(100);
strcpy( m , "grge" );
char *n="fghjr";
char *c;
cout<<m<<endl;
cout<<n<<endl;
c=ZhanJie(m,n);
cout<<c<<endl;
free( m );
}
最后说一下这是strcat
6. 关于c语言的问题:编一个程序实现strcpy的功能
因为长度包括后面的\0 在循环里复制内容结束符号一起复制