string, const char*,char*, 及char[]

string, const char*,char*, 及char[]
1、区别
1)string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题;
char *的内存管理由用户自己处理,很容易出现内存不足的问题;string适用于不知字符串所需大小,char *处理已知存储空间。
2)string提供各种成员函数来处理串的每一个字符;char *处理串,必须自己编写,处理过程中容易出现内存问题。
3)string是STL里的一个容器,操作字符串非常方便;char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。使用string的时候一定要注意构造和拷贝以及析构带来的性能开销,尽可能的减少构造,能使用引用的地方尽量用引用,减少不必要的构造
注:与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。


2、string转const char *
1)c_str()
2)data()
eg:
#include <string>
#include <iostream>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char** argv)
{
string str = "abcdeg";
const char *k = str.c_str();
const char *t = str.data();
printf("%s %s\n", k, t);
cout << k  << " "<< t << endl;
return 1;
}
 


3、const char* 转 string
直接赋值
#include <string>
#include <iostream>
#include <stdlib.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char** argv)
{
const char* c_str = "abc";
string str1(c_str);
cout << str1 << endl;
string str2 = c_str;
cout << str2 << endl;
return 1;
}
 


4、string转 char *
1)strcpy
eg:#include <string>
#include <iostream>
#include <stdlib.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char** argv)
{
string str = "abc";
char * cstr;
int len = str.length();
cstr = new char[len + 1];
strcpy(cstr, str.c_str());
cout << cstr << endl;
delete cstr;
return 1;
}
 


2)copy()
显示有点问题
eg:
#include <string>
#include <iostream>
#include <stdlib.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char ** argv)
{
string src = "abc";
char* data;
int len = src.length();
data = (char *)malloc((len + 1) * sizeof(char));
src.copy(data, len);
//printf("%s\n", data);
cout << data << endl;
free(data);
return 1;
}



5、char* 转string
直接赋值
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char ** argv)
{
char* c = "abc";
string src(c);
cout << src << endl;
printf("%s\n", src); //必须进行转换,否则显示有问题
printf("%s\n", src.c_str());
return 1;
}
 


6、const char* 转char*
strcpy
eg:
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char ** argv)
{
const char * cpc = "abc";
char* pc = new char[100];//足够长
strcpy(pc, cpc);
cout << pc << endl;
return 1;
}
 


7、char [] 转string
直接赋值
eg:
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char ** argv)
{
char c[] = "abc";
string src(c);
               //stirng src = c;
cout << src << endl;
printf("%s\n", src); //必须进行转换,否则显示有问题
printf("%s\n", src.c_str());
return 1;

}


 
8、string转char[]
下标访问,赋值
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>


using std::cout;
using std::endl;
using std::string;


int main(int argc, char ** argv)
{
string str = "abcde";
char cStr[8];
int i;
for (i = 0; i < str.length(); i++)
cStr[i] = str[i];
cStr[i] = '\0';
printf("%s\n", cStr);
cout << cStr << endl;


return 1;
}
 




参考文献
[1] string 和 char *两者的区别是什么 ?什么时候用string好? 什么时候用 char * 合适?什么时候同时都能用,http://www.cnblogs.com/GODYCA/archive/2013/01/08/2851923.html
[2] 浅析string 与char* char[]之间的转换, http://www.jb51.net/article/41917.html
[3] C++ char*,const char*,string的相互转换, http://www.cnblogs.com/zhixing/archive/2013/06/04/3116814.html
[4] string中c_str()、data()、copy(p,n)函数的用法, http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html


注:为了便于自己学习,无心侵权,尽可能将所引用的文章列举出来;有些文章的内容可能会与原作重复度较高,还请谅解。如作者举报,愿意删除此文。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
string与const char*之间的转换可以使用不同的方法。其中一种方法是使用strcpy_s或strncpy_s函数将string转换为char[]。 具体步骤如下: 1. 使用c_str()函数将string转换为const char*类型。 2. 声明一个char[]类型的数组来存储转换后的字符。 3. 使用strcpy_s或strncpy_s将const char*复制到char[]数组中。 另外,如果要将const char*转换为string,可以直接使用const char*进行赋值,或者使用string的构造函数进行转换。 请注意,转换过程中要确保目标数组的大小足够大来容纳源字符串的长度,并且要避免内存溢出的情况。 综上所述,可以使用strcpy_s或strncpy_s函数将string转换为char[],以及将const char*转换为string。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [const char* 与 string 的理解详解](https://blog.csdn.net/weixin_38606457/article/details/116603782)[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* [string和const char*类型的相互转化问题](https://blog.csdn.net/m0_50674480/article/details/117929273)[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、付费专栏及课程。

余额充值