字符串函數---strcpy()與strncpy()詳解及實現
一、strcpy()與strncpy()
strcpy():strcpy(dest,src); strcpy把src所指向以'\0'結尾的字符串復制到dest所指的數組中,返回指向dest的指針。
當sizeof(dest)>=sizeof(src)時,拷貝正確,並在dest字符串後面加入'\0';
當sizeof(dest)
strncpy():strncpy(dest,src,n); strncpy把src所指向以'\0'結尾的字符串的前n個字符復制到dest所指的數組中,返回指向dest的指針。
當n>=sizeof(src)時,拷貝正確,並在dest字符串後面加入'\0';
當n
示例代碼:
#include
#include
using namespace std;
int main()
{
char a[]="lanzhihui is a good boy!";
//以下strcpy
char b[30];
char c[30];
char d[30];
strcpy(b,a); //strcpy進行簡單的拷貝,除了拷貝a數組的字符串外,還會將a數組後面的'\0'拷貝給數組b.
cout<<"b:"<=sizeof(a) 時,正確拷貝,並在數組b字符串後加'\0'。
//當數組b的存儲空間 sizeof(b)=sizeof(a) 時,正確拷貝,
strncpy(g,a,10); //拷貝a中前9個字符到g中,必須手動為g數組加入'\0'
g[9]='\0'; //n
舉例理解strcpy()與strncpy()函數拷貝以 '\0' 結束:
#include
#include
using namespace std;
int main()
{
char s[]="lanzhihui\0 is a good boy!";
char name[30];
strcpy(name,s);//拷貝以'\0'結束
cout<
二、strcpy()與strncpy()實現
根據對strcpy()與strncpy()函數功能的測試,寫出實現的代碼:
#include
#include
#include
using namespace std;
char *strcpy_m(char *dest,const char *str)
{
assert((dest!=NULL)&&(str!=NULL));
char *cp=dest;
while((*cp++=*str++)!='\0')
{
//
}
return dest;
}
char *strncpy_m(char *dest,const char *str,int n)
{
assert((dest!=NULL)&&(str!=NULL));
char *cp=dest;
while(n&&(*cp++=*str++)!='\0')
{
n--;
}
if(n)
{
while(--n)
*cp++='\0';
}
return dest;
}
int main()
{
char a[]="lanzhihui is a good boy!";
//以下strcpy_m
char b[30];
char c[30];
char d[30];
strcpy_m(b,a);
cout<<"b:"<
可見自己寫的strcpy_m()函數與strncpy_m()函數與庫函數運行結果一樣。