2016-08-13 53 views
1

所以我有一個編輯值的函數,但我主要看到它輸出1309668848的值,並在每次運行程序時都進行更改。 (這在預處理器中不會發生)。我一直在爲此苦苦掙扎,決定來這裏尋求建議。C++當我將一個字符串轉換爲一個int時,int只是一個隨機數?

下面是該功能。

void GetDahInt() { 
    std::string NewValueS; 
    getline(std::cin, NewValueS); 
    NewValue = (int)NewValueS.c_str(); 
} 
+0

它是該C字符串的地址。 – Till

+0

我嘗試使用cin以及輸入NewValueS,但它仍然輸出巨大的隨機數 –

+3

您需要仔細思考'std :: string :: c_str()'返回的內容。 – juanchopanza

回答

5

您可以使用

std::stoi(str) 

丟棄任何空白字符(通過調用isspace爲()),直到第一個非空白字符被發現,然後採取儘可能多的字符可能形成一個有效的base-n(其中n = base)整數表示並將它們轉換爲整數值。

來源:Documentation of stoi

1

NewValueS.c_str()指針返回到字符數組。
您正在將指針轉換爲int(獲取c_str()的內存地址)。

參見:http://www.cplusplus.com/reference/string/string/c_str/

串:: c_str 獲取C字符串等效 返回一個指針數組,其中包含的字符的表示電流值的空終止序列(即,C-字符串)的字符串對象。

該數組包含組成字符串對象的值的相同字符序列,並在末尾添加一個附加的終止空字符('\ 0')。

NewValue = (int)NewValueS.c_str();將地址轉換爲字符串,並且每次執行代碼時地址都會更改。

0

你正在尋找的東西像std::stoi(字符串爲int),這樣調用:

std::string str = ...; 
int value = std::stoi(str); 

的優點和這個選項的利弊相比,其他如std::stringstream這裏討論: How to parse a string to an int in C++?

你的演員產生一個「隨機」數字的原因是c_str返回一個指向char數組開頭的指針。

const char*int鑄造是不確定的行爲(這些類型甚至可能不具有相同的大小),但可能會產生依賴於您的std::string被分配的內存地址。

相關問題