我无法在C ++中执行此操作
string temp = "123";
int t = atoi(temp);
为什么????
答案 0 :(得分:8)
这是因为atoi
期待一个原始的const char*
指针。由于没有从std::string
到const char*
的隐式转换,因此会出现编译器错误。使用c_str()
的{{1}}方法为std :: string对象获取c样式std::string
。顺便说一句,在C ++中,您可以使用流来执行此转换,而不是使用这些C风格的API。
答案 1 :(得分:6)
atoi(temp.c_str())
答案 2 :(得分:3)
请参阅以下问题:
C atoi() string to int:指出atoi()已被弃用。
Why doesn't C++ reimplement C standard functions with C++ elements style?:提供其他方法来执行您在上面列出的内容。
答案 3 :(得分:1)
好吧,你把一个std :: string(大概)传递给atoi,它接受一个const char *。尝试:
atoi(temp.c_str());
之前提到的。相反,你可以使用boost的lexical_cast:
std::string temp = "123";
try {
int foo = boost::lexical_cast<int>(temp);
} catch (boost::bad_lexical_cast e) {
//handle error here
}
您可以将try / catch包装到模板函数中,该函数在您尚未进行异常处理的情况下处理异常。
答案 4 :(得分:0)
std :: string与字符指针不同(如C中所示)。
答案 5 :(得分:-1)
int i = 12345;
std::string s;
std::stringstream sstream;
sstream << i;
sstream >> s;