簡體   English   中英

為什么我不能在“字符串”上使用 atoi() function 而不是 C++ 中的字符指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM