C++中string.c_str()函数的一些疑问,寻求高手帮忙
测试源码如下:
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
void myFunction(const char *p_ch)
{
string str("Function");
printf("函数里面,字符串为: %s\n", str.c_str());
p_ch = str.c_str();
}
int main()
{
const char * const_pcstr_t;
myFunction(const_pcstr_t);
printf("函数外面,字符串为: %s\n", const_pcstr_t);
{
string str("Block");
printf("块作用域里面,字符串为: %s\n", str.c_str());
const_pcstr_t = str.c_str();
}
printf("块作用域外面,字符串为: %s\n", const_pcstr_t);
char* pcstr_t = NULL;
try
{
pcstr_t = new char[10];
}
catch(bad_alloc)
{
cout<< "执行new 操作,分配空间失败."<< endl;
return 1;
}
strcpy(pcstr_t , "Heap");
printf("堆空间删除之前,字符串为: %s\n", pcstr_t);
delete [] pcstr_t;
printf("堆空间删除之后,字符串为: %s\n", pcstr_t);
int i_t = 0;//查看地址可以知道,字符串是存放在堆上,i_t存放在栈上
printf("堆中分配的地址:%x, string内部返回的地址:%x, 局部变量(栈上分配的)地址:%x\n",
reinterpret_cast<unsigned int>(pcstr_t),
reinterpret_cast<unsigned int>(const_pcstr_t),
reinterpret_cast<unsigned int>(&i_t)
);
return 0;
}
g++编译后程序输出如下:
函数里面,字符串为: Function
函数外面,字符串为: U��WVS�O
块作用域里面,字符串为: Block
块作用域外面,字符串为: Block
堆空间删除之前,字符串为: Heap
堆空间删除之后,字符串为:
堆中分配的地址:97c2040, string内部返回的地址:97c2034, 局部变量(栈上分配的)地址:bf9d4b8c
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
void myFunction(const char *p_ch)
{
string str("Function");
printf("函数里面,字符串为: %s\n", str.c_str());
p_ch = str.c_str();
}
int main()
{
const char * const_pcstr_t;
myFunction(const_pcstr_t);
printf("函数外面,字符串为: %s\n", const_pcstr_t);
{
string str("Block");
printf("块作用域里面,字符串为: %s\n", str.c_str());
const_pcstr_t = str.c_str();
}
printf("块作用域外面,字符串为: %s\n", const_pcstr_t);
char* pcstr_t = NULL;
try
{
pcstr_t = new char[10];
}
catch(bad_alloc)
{
cout<< "执行new 操作,分配空间失败."<< endl;
return 1;
}
strcpy(pcstr_t , "Heap");
printf("堆空间删除之前,字符串为: %s\n", pcstr_t);
delete [] pcstr_t;
printf("堆空间删除之后,字符串为: %s\n", pcstr_t);
int i_t = 0;//查看地址可以知道,字符串是存放在堆上,i_t存放在栈上
printf("堆中分配的地址:%x, string内部返回的地址:%x, 局部变量(栈上分配的)地址:%x\n",
reinterpret_cast<unsigned int>(pcstr_t),
reinterpret_cast<unsigned int>(const_pcstr_t),
reinterpret_cast<unsigned int>(&i_t)
);
return 0;
}
g++编译后程序输出如下:
函数里面,字符串为: Function
函数外面,字符串为: U��WVS�O
块作用域里面,字符串为: Block
块作用域外面,字符串为: Block
堆空间删除之前,字符串为: Heap
堆空间删除之后,字符串为:
堆中分配的地址:97c2040, string内部返回的地址:97c2034, 局部变量(栈上分配的)地址:bf9d4b8c
...全文
相关推荐
c++中string类成员函数c_str()的用法
c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式
C++string中的insert()插入函数详解
主要介绍了C++string中的insert()插入函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
c++中c_str()的用法示例
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组 //主要介绍c_str //c_str():生成一个const char*指针,指向以空字符终止的数组。 //这个数组应该是string类内部的数组 #include //需要包含cstring的字符串 #include using namespace std; int main() { //string-->char* //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同 //这个数组的数据是临时的,当有一个改变这些数据的成员函数
string中c_str(),data(),copy(p,n)函数的用法总结
以下是对string中c_str(),data(),copy(p,n)函数的用法进行了详细的介绍,需要的朋友可以过来参考下
c_str()的用法详细解析
c_str()就是把string类对象转换成和c兼容的char *类型。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式


