strcpy、strncpy与memcpy的区别与使用方法

一、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行运行,结果都是:


也就是说这三个函数都有可能会篡改非法内存。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值