一、c标准库中关于这三个函数的说明
1.strcpy
2.memcpy
3.strncpy
二、总结
1.strcpy这个函数比较简单,用于字符串的复制,它只要求s2有足够空间可以存下s1,否者复制到s2存不下为止。
memcpy和strncpy都是可以指定要复制的字符个数n,只是strncpy遇到'\0'时就会停止字符串的复制,并在后面添加'\0'以使得总复制的字符数为n。
这里隐藏了一个事实,就是s2指向的内存一定会被写n个字符。
2.在s1小于s2或者s1小于n的时候,strcpy,memcpy和strncpy都可以正常运行,会覆盖超出s1后面的元素。如下所示:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
char a[15];
for (int i = 0; i < 15; i++)
a[i] = 'a';
char b[] = "hellohellohellohellohellohello";
strcpy(a, b);
//strncpy(a,b,30);
//memcpy(a, b,30);
for (int i = 0; i < 30;i++)
cout << i << " "<<a[i]<<endl;
return 0;
}
让第11或者第12行或第13行运行,结果都是:
也就是说这三个函数都有可能会篡改非法内存。