C++:string类型、char *类型,int类型之间的转换:atoi(),stoi(),c_str()

目录

s.c_str():

atoi()函数

stoi()函数


#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(溢出上界)。

猜你喜欢

转载自blog.csdn.net/Doutd_y/article/details/82316296