目录
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
const char *chs;
string s = "12345678";
chs = s.c_str();
int i = atoi(chs);
int si = stoi(s);
cout << ss << endl;
cout << chs;
return 0;
}
s.c_str():
作用:将string对象转换为 const char * 对象
函数原型:
const char * c_str() const;
c_str()函数返回一个指向C字符串的指针常量,内容是字符串对象的当前内容加上一个额外的终止字符(‘\ 0’)。这是为了与c语言兼容,因为在c语言中没有string类型,所以必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
有博客说下面的代码是错误案例:https://blog.csdn.net/changqing5818/article/details/51276245
const char *chs;
string s = "12345678";
chs = s.c_str();
并解释说“因为c_str()返回的是一个临时指针,s对象被析构,其内容被处理,所以c最后指向是垃圾内存,内容就不确定了”,
但是我用visual studio 编译运行时并没有报错,且chs和s正常输出,结果均为12345678
也可以用一下方法:
使用strcpy()函数
char chs[20] = {0}; // 初始化结果为:该字符串数组的各个元素均为'\0'
string ss = "12345678";
strcpy(chs,ss.c_str());
atoi()函数
函数原型:
int atoi (const char * str);
功能:把字符串(char *)转换成整型数。
C语言中需要包含头文件:#include <stdlib.h>
C++中需要包含头文件:#include <string>
返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0。
stoi()函数
int stoi(string s);
功能:将字符串(string)转换成整数。
C++函数,需要包含头文件:#include <string>
stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error。
atoi函数则不做范围检查,若超过int范围,则显示-2147483648(溢出下界)或者2147483647(溢出上界)。