[英]Why I cant use atoi() function on a "string" instead of the char pointer in C++?
我嘗試了以下代碼,但它給了我錯誤。
int main() {
string String = "1235";
int num = atoi(String);
cout << num << endl;
return 0;
}
/*
error: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'const char*' for argument '1' to 'int atoi(const char*)'
int num = atoi(String);
^
mingw32-make.exe[1]: *** [Debug/main.cpp.o] Error 1
mingw32-make.exe: *** [All] Error 2
*/
但是,如果我使用以下代碼,它就可以正常工作。
int main() {
char* String = "1235";
int num = atoi(String);
cout << num << endl;
return 0;
}
//prints out 1235
我知道我可以使用 stoi() function 解決我的問題。
int main() {
string String = "1235";
int num = stoi(String);
cout << num << endl;
return 0;
}
//prints out 1235
我可以通過使用char
指針而不是string
來解決我的問題。 但我只想知道為什么不能通過將string
本身放入atoi()
來完成此操作。 atoi()
在內部是如何工作的?
我只想知道atoi()
function 在 C++ 中是如何工作的
雖然std::stoi
接受std::string
作為輸入,但::atoi
不接受。
注: std::string
是c++ class類型, const char*
是基本數據類型。 盡管std::string
確實有一個成員 function .c_str()
,它可以使用const char*
類型返回其 C 風格表示。
<string>
中std::stoi
的原型聲明:
int stoi( const std::string& str, std::size_t* pos = nullptr, int base = 10 );
int stoi( const std::wstring& str, std::size_t* pos = nullptr, int base = 10);
<stdlib.h>
中::atoi
的原型聲明:
int atoi (const char *__nptr);
因為const char*
和std::string
不兼容,隱式轉換導致錯誤。
如果您仍想使用std:string
:
int main() {
string String = "1235";
int num = atoi(String.c_str());
cout << num << endl;
return 0;
}
看到這個參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.