记录:C++ string转char *

本文介绍了如何在C++中使用c_str()函数将string类型转换为char*,强调了使用strcpy()操作c_str返回的指针的重要性,并警告了不恰当用法可能导致的内存问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要将string转char*需要c_str()函数。
c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.

string log_path= ”zby.txt“
char path[128] = {0};
strcpy(path, log_path.c_str());

char*向string转换支持隐式类型转换,即:

char* c[ ] =  {1,2,3};
string p = c ;

注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
#########################################
最好不要这样使用:

char* c;
string s="aaaaa";
c = s.c_str();

因为c最后指向的内容是垃圾,因为s对象被析构,其内容被处理。

END.

随笔 - 764 文章 - 3 评论 - 196 CString,string,char*之间的换() 这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应换的方法。 1 string to CString CString.format("%s",string.c_str()); 2 CString to string string str(CString.GetBuffer(str.GetLength())); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char,CString,sizeof(char)); 6 char * to CString CString.format("%s",char*); CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *换时,要把char定义成为const char*,这样是最安全的。 以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T("%s") 补充: CString 可能是 CStringW/CStringA,在与 string 换时,如果是 CStringW,还涉及编码换问题。下面以 CStringA 来说明。 1 string to CString CString.format("%s",string.c_str()); CStringA = string.c_str() 就可以了 2 CString to string string str(CString.GetBuffer(str.GetLength())); GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。 string = CStringA string = CStringA.GetBuffer(); 3 string to char * char *p=string.c_str(); 4 char * to string string str(char*); 5 CString to char * strcpy(char *,CString,sizeof(char)); 按照 3 风格,这里应该 char * = CStringA; 或者 char *p = CStringA.GetBuffer(); 6 char * to CString CStringA = char * 就可以了
要将std::string换为char*,有三种方法可以使用。第一种方法是使用c_str()函数,该函数返回一个指向字符串的const char*指针,可以通过强制类型换将其换为char*。例如: std::string str = "Hello world"; const char* cstr = str.c_str(); char* charPtr = const_cast<char*>(cstr); 第二种方法是使用data()函数,该函数返回一个指向字符串的const char*指针,同样可以通过强制类型换将其换为char*。例如: std::string str = "Hello world"; const char* data = str.data(); char* charPtr = const_cast<char*>(data); 第三种方法是使用copy()函数,该函数可以将std::string中的字符复制到一个char*缓冲区中。需要注意的是,在使用该函数之前,需要确保目标缓冲区足够大以容纳字符串和终止符。例如: std::string str = "Hello world"; char charArr[12]; str.copy(charArr, str.size() + 1); charArr[str.size()] = '\0'; <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [std::stringchar* 之间的换](https://blog.csdn.net/u014801811/article/details/80113382)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [C++ 模板写的短小字符串类,用于替换字符数组和std::string](https://download.csdn.net/download/foxtj35/12240064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值