1. strcpy()
1-1.函数原型: char *strcpy(char *dest,const char *src)
1-2.头文件: #include<string.h>
1-3.函数功能: 把src里的数据全部复制到dest里。
1-4.几种情况
1-4-1. 正常情况下,即dest空间比src大且dest为空。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str1[10];
char str2[6]={'a','b','c'};
strcpy(str1,str2);
cout<<str1;
return 0;
}
结果:abc
1-4-2. dest空间比src小且dest为空,但是src赋值的个数比dset空间小。此时使用没有什么影响,和4-1的结果一样。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str1[5];
char str2[6]={'a','b','c'};
strcpy(str1,str2);
cout<<str1;
return 0;
}
结果:abc
1-4-3. dest空间小且空,但是src赋值的个数比dest多。此时dest空间会扩充(此时并非真正意义上的扩充,用sizeof(dest)计算得知dest仍是原来声明数组时的大小),仍将src全部复制进来。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char dest[2];
char str[6]={'a','b','c','d','e','f'};
strcpy(dest,str);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
abcdef
dest size=2
1-4-4. dest的空间小于src的,dest赋值了。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char dest[5]={'q','w','t','y','p'};
char str[6]={'a','b','c','d','e','f'};
strcpy(dest,str);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
abcdef
dest size=5
1-4-5. dest空间比src的大,dest的赋值个数比src的多。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str[5]={'q','w','t','y','p'};
char dest[]={'a','b','c','d','e','f','z','l','n'};
strcpy(dest,str);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
qwtyp
dest size=9
1-5. 总结
以上各种情况均可将src的数据复制到dest中,而且dest的空间大小不会改变。
2. strncpy()
2-1. 函数原型 char* strncpy(char* dest,char* src,int size)
2-2. 头文件: #include<string.h>
2-3. 函数功能: 复制src到dest中,复制的长度由size决定。
2-4. 几种情况
2-4-1. sizeof(dest)>sizeof(src),dest未赋值。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char dest[10];
char str[5]={'q','w','t','y','p'};
strncpy(dest,str,4);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
qwty
dest size=10
2-4-2. sizeof(dest)<sizeof(src),dest未赋值。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char dest[3];
char str[5]={'q','w','t','y','p'};
strncpy(dest,str,4);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
qwty
dest size=3
2-4-3. sizeof(dest)>sizeof(src),dest赋了初值且比size的多,dest前size个赋了src的值,dest大于size的部分保留。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char dest[8]={'a','b','c','d','e','f','g','h'};
char str[5]={'q','w','t','y','p'};
strncpy(dest,str,4);
cout<<dest<<endl<<"dest size="<<sizeof(dest);
return 0;
}
结果:
qwtyefgh
dest size=8