2016-12-24 67 views
-2

我知道爲什麼會發生分段錯誤,但我無法根據下面的代碼找出錯誤,以便根據空格分割字符串。另外,如果我在拆分函數中註釋掉while循環,當打印出結果字符串時,我會得到數字。是否因爲to_string?如果我使用typeid(variable).name()對我在主函數中打印時得到的結果字符串進行處理,則會得到:NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE爲什麼我會收到分段錯誤?輸出爲數字而不是字符串的原因是什麼?

+1

程序應該做什麼?另外,因爲你似乎在Linux上,你有沒有嘗試過使用gdb? – tambre

+0

'std :: string :: find'和'std :: string :: substr'已經足夠你 – Danh

+0

所有這些標籤真的有必要嗎? – byxor

回答

3

要回答你的最後一個問題:

C++經常,但並非總是如此,對待一個char值作爲數字,當然有,如果你把它傳遞給to_string。因此to_string(' ')將返回"32"(通常),這是用十進制數轉換爲字符串的空格的字符代碼。

要將字符轉換爲相應的單元素字符串,請使用例如string(1, ' ')

對於您的分段錯誤,調試器是正確的工具。

0

你的分割功能是越野車。你的程序會一直暗戀,因爲while循環中的while(to_string(s[a]) != " ")條件會導致無限循環。

對我來說,使用to_string(s [a])似乎很奇怪。假設s [a]實際上是空格char,即使在這種情況下,toString(「」)將返回一個包含「32」的std :: string。而「32」不等於「」,所以這會導致你的循環無限運行。

而且因爲在循環中你正在增加像下面這樣的索引。

a++; ---> You increase the index in infite loop so a can go to millions 
    temp = temp + s[a]; ---> you are using the index and causing index out of range. 

您將導致索引超出範圍錯誤。

相關問題