你在程序設置是在CMD值線的末端需要;
。
告訴你的源代碼有沒有問題(如果你添加;
)。我們可以編譯它沒有警告,它工作得很好,如果我們增加薩姆線,使其成爲一個獨立的程序:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main(int ac, char **av) {
std::string cmd = "par1=1&par2=ciao&par3=1.2e4";
std::stringstream ss(cmd);
std::string argdef;
std::vector<std::string> pairs(0);
while (std::getline(ss, argdef, '&')) {
std::cout << argdef << std::endl;
pairs.push_back(argdef);
}
return 0;
}
例如,彙編作品在Linux上的OpenSuSE LEAP 42.1無預警與G ++/GCC 4.8。 5(源文件被命名爲x.cpp),輸出是正確的(你可以看到,我已經添加了一行記錄argdef的內容,它看起來是正確的):
% g++ -Wall -o x x.cpp
% ./x
par1=1
par2=ciao
par3=1.2e4
%
所以這裏一切都很好。
說明你的段錯誤錯誤的根本原因:
- 要麼
;
你已經在第一行遺忘使程序不能編譯,而你正在運行的二進制是一箇舊的,有錯誤;
- 或者您的程序中有其他任何內容會導致分段錯誤。
無論如何,這裏顯示的源代碼是正確的。
[Can not reproduce。](http://coliru.stacked-crooked.com/a/35cfe24f53a60b49) – aschepler
很確定getline會通過null結束符發揮作用。嘗試添加一個'&'到你的字符串的末尾?沒關係... stringstream應該爲你處理eof。 – zzxyz