C++:strcpy(),strncpy()

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
发布了30 篇原创文章 · 获赞 6 · 访问量 1000

猜你喜欢

转载自blog.csdn.net/weixin_43677405/article/details/100030914
今日推荐