char*和char[]的理解

在C++中常量不能赋值,变量才能赋值。C++使用char* 实际上是指向字符串首地址的指针变量。

可以把其他字符串赋值给char*,实际上的操作是把其他字符串的首地址存放到char*指针变量里。

char * pstr = "hello world";
pstr = "maoge";

上面两句代码对char*字符串的操作,是把字符串指针 pstr 指向的首地址从hello world 变换为maoge,修改的为指针变量的值,不是修改字符串常量,是变量赋值操作。

下面为实现字符串strcpy函数的代码:

char* strcpy_m(char* strDest,  char* strsrc)
{
	assert((strDest != NULL) && (strsrc != NULL));
	char* address = strDest;
	while (*strsrc != '\0')
	{
		*strDest = *strsrc;
		strsrc++;
		strDest++;
	}	
	*strDest = *strsrc;
	return address;
}


int main()
{
	char pstr[] = "helloworld";
	char con[] = "asd";
//这里只能使用char pstr[],不能使用char* pstr,
//使用主要有两点问题:1.使用char* 相当于是对字符串常量进行修改,char* 指向的区域一般是只能读不能写,所以不合法
//2.如果是直接对char* 指向的内存空间进行写入数据,相当于强转为char[]类型,会发生内存空间的溢出,我在vs上进行运行的时候就发生了内存溢出的问题!
	strcpy_m(con, pstr);
	cout << "con" << con;
	return 0;
}

可以参考这篇文章:

【C/C++】对char* 和 char[]区别的一些理解

实际上, char * a=”string1”; 的写法是不规范的! 
因为a指向了即字符常量,一旦strcpy(a,”string2”)就糟糕了,试图向只读的内存区域写入,程序会崩溃的!尽管VS下的编译器不会警告,但如果你使用了语法严谨的Linux下的C编译器GCC,或者在windows下使用MinGW编译器就会得到警告。

所以,我们还是应当按照”类型相同赋值”的原则来写代码: const char * a=”string1”; 
保证意外赋值语句不会通过编译。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值