string的c_str()和data()有区别?

本机windows系统安装了VS2008环境下,查看xstring文件的源码发现xstring类的c_str(),data()实现如下

	const _Elem *__CLR_OR_THIS_CALL c_str() const
		{	// return pointer to null-terminated nonmutable array
		return (_Myptr());
		}

	const _Elem *__CLR_OR_THIS_CALL data() const
		{	// return pointer to nonmutable array
		return (c_str());
		}
这难道有区别吗???

写了个测试代码如下:

#include<stdio.h>
#include<cstring>
#include<string>
using std::string;

int _tmain(int argc, _TCHAR* argv[])
{
	sTopic = "hello world";
	const char* pC_str = sTopic.c_str();
	printf("sTopic.c_str()=%d, sizeof(...)=%d, strlen(...)=%d\n", pC_str, sizeof(sTopic.c_str()), strlen(pC_str) );
	const char* pData = sTopic.data();
	printf("sTopic.data()=%d, sizeof(...)=%d, strlen(...)=%d\n", pData, sizeof(sTopic.data()), strlen(pData) );
	char * pTemp = const_cast<char*>(sTopic.c_str() );
	pTemp[0] = 'a'; 
	printf("modify [0]='a' after const_cast(sTopic.c_str() ) sTopic=%s\n", sTopic.c_str() );
	pTemp = const_cast<char*>(sTopic.data() );
	pTemp[1] = 'b';
	printf("modify [1]='b' after const_cast(sTopic.data() ) sTopic=%s\n", sTopic.c_str() );
	return 0;
}
结果是:

sTopic.c_str()=23859240, sizeof(...)=4, strlen(...)=11
sTopic.data()=23859240, sizeof(...)=4, strlen(...)=11
modify [0]='a' after const_cast(sTopic.c_str() ) sTopic=aello world
modify [1]='b' after const_cast(sTopic.data() ) sTopic=abllo world

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值