stoi
和 atoi
转换类型的有效长度问题
在刷PAT时遇到一个运行时错误,发现是
stoi
的有效长度导致的,遂记录下。
1 基本使用
定义:
int stoi( const std::string& str, std::size_t* pos = 0, int base = 10 );
int atoi( const char *str );
使用stoi
时传入字符串即可,使用atoi
需要转换成const char*
类型。
string s="123";
int num = stoi(s);
string s1 = "456";
int num = atoi(s1.c_str());
这样即可以将string
类型转成int
型。
2 有效长度为10
测试stoi
代码:
int main() {
string s;
for (int i = 1; i < 100; i++) { //每次s增加1
s += "1";
int num = stoi(s);
cout << i << " " << num << endl;
}
return 0;
}
结果:
地址越界之后就报错,可见只能转换string
类型长度为10
的字符串。
测试atoi
代码:
int main() {
string s;
for (int i = 1; i < 100; i++) {
s += "1";
int num = atoi(s.c_str());
cout << i << " " << num << endl;
}
return 0;
}
结果:
地址越界之后不报错,但是输出结果是地址。。。