首先附上两者的代码实现:
strcpy:
char* strcpy(char * destination, const char * source );
strncpy:
char * strncpy ( char * destination, const char * source, size_t num );
1.拷贝num个字符从源字符串到目标空间。
2.如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
strcpy:
int main()
{
char str[4] = {0};
char *p = "abc";
strcpy(str, p);
cout << str << endl;
return 0;
}
错误的代码:
int main()
{
char str[4] = {0};
char *p = "abcdefg";
strcpy(str, p);
cout << str << endl;
return 0;
}
但是当str的空间小于p指向空间时,程序就会出现崩溃。但在平时应用时,我们时常会出现正确预测目标空间是否够大。问题就此产生。所以需要对该程序进行修改,用strncpy函数代替strcpy函数。
strncpy:
更改后正确的代码:
int main()
{
char str[4] = {0};
char *p = "abcdefg";
strncpy(str, p, sizeof(str) - 1);
cout << str << endl;
return 0;
}
</