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 在循環里復制內容結束符號一起復制