我遇到了一個問題,不知道它爲什麼發生。基本上我有一個討厭的函數,它解析一個文本文件並返回所需參數名稱後存儲在一行中的多個值的下一個條目。它的工作原理,我不認爲有必要發佈其代碼。但問題是:在一個循環中我想用一個襯墊)從的atoi(返回一個整數值賦值給一個變量:函數返回string.c_str()作爲atoi()意外行爲的參數
for (...)
{
int fieldId = atoi(fileParser.getNextValueOfParameter("fieldIdArray").c_str());
std::cout << fieldId << " ";
}
不幸的是分配給第一個值fieldId期間變量第一輪循環總是。剩下的值分配正確。
但是,不是一個班輪分配當我使用字符串來存儲我的解析函數返回的文本,然後單獨進行轉換後的數字值分配給 INT - 一切完美:
for (...)
{
std::string fieldIdString = fileParser.getNextValueOfParameter("fieldIdArray");
int fieldId = atoi(fieldIdString.c_str());
std::cout << fieldId << " ";
}
所有值都對應於存儲在我的文件中的實際文本編號。在第一次循環傳遞期間沒有分配的值。
這兩個代碼僅在使用臨時串變量來存儲文本的一個問題是不同的,將其轉換爲 .c_str()內部的atoi(),作爲它的參數之前。
爲什麼會發生? 如果這很重要,我正在使用TDM-GCC 4.7.1 32位編譯器。
? –
@JonathonReinhart,因爲有了這個錯誤的編譯器版本,我不能使用_std :: stoi_,我想要一個快速的解決方法,它是_atoi()_,我希望它能夠工作。 – wowowo
getNextValueOfParameter的返回類型是什麼?分成兩行會做兩件事:(1)它延長了返回值的生命週期,並且(2)如果返回值是一個引用,它會複製返回值。 –