C++ 使用字符数组的一些问题,strcpy & strcpy_s

博客讨论了在C++中如何安全地使用strcpy_s函数处理字符数组,避免栈溢出和越界访问的问题。建议避免使用不安全的strcpy,转而使用strcpy_s,并强调了计算字符串长度时应使用strlen而非sizeof。还提到了使用std::string作为替代方案的可行性。
摘要由CSDN通过智能技术生成

使用字符数组存储字符串,在参数传递的时候传递char * 指针。然后需要使用strcpy_s函数,复制字符数组到自己的成员变量中。然后再返回时,直接返回这个字符数组就好了,也是一个指针。

注意不要使用strcpy拷贝字符串数组,因为这个函数在拷贝的时候不会检查边界,非常容易造成栈溢出,越界访问。使用更安全的strcpy_s, 用法是 strcpy_s(a, len, b);把b赋值到a中,len是b的长度。这里注意是使用strlen而不是sizeof()来计算字符数组的长度。因为sizeof计算的是字符指针的长度。strlen头文件是<string.h>

另一个思路就是使用string替换char[]

class A
{
public:
	A(const char* s){ 
		strcpy_s(cha, strlen(s)+1, s);
		cout << "A()" << endl; 
	}
	char* getcha1() {
		return cha;
	}

private:

	char cha[10];

};



A a = A("hahaha");
cout << a.getcha1() << endl;

值得注意的是,sizeof其实可以检测出数组类型的空间长度。对上面的程序,sizeof(cha)==10.

所以对于数组可以这样计算 n = sizeof(array) / sizeof(array[0])

对于指针类型,sizeof就是给出当前指针占用空间的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值