代碼:爲什麼string.insert(iterator,char)連續工作六次而不是七次? (C++)
#include <iostream>
#include <string>
using namespace std;
string expand(string mask);
int main()
{
string tiny = "blah blah [a-e] blah blah";
string lengthy = "blah blah [a-i] blah blah";
cout << expand(tiny) << endl;
cout << expand(lengthy) << endl;
return 0;
}
string expand(string mask)
{
int i, range;
/* find the first bracket, grab start letter */
unsigned int bracket = mask.find("[");
char start = mask[bracket + 1];
/* point iterator at first bracket */
string::iterator here = mask.begin();
here += bracket;
/* find second bracket, calculate ascii range */
range = mask[bracket + 3] - mask[bracket + 1];
/* kill brackets and their contents*/
mask.erase(here, here + 5);
/*** This loop causes an error on the 7th iteration ****/
for(i = 0; i <= range; i++)
mask.insert(here, (start + range) - i);
return mask;
}
輸出:
亞光@ Callandor:〜/ PROG/TEMPVER $克++ TEST.CPP -o玩
亞光@ Callandor:〜/ prog/tempVer $ ./play
blah blah abcde blah blah
等等等等defghi等等等等
* glibc的檢測* ./play:免費():無效的下一個尺寸(快速):0x08353068
=======回溯:========= /lib/libc.so.6(+0x6c501)[0x5b5501] ...
我嘗試使用string :: insert()時遇到一些奇怪的行爲迭代器,炭);我把它放在'for'循環中,我根本不移動迭代器,循環只是插入字符。如果我有六個或更少的字符插入,但它失敗了七個或更多,它工作正常。
基於輸出(見上面),它看起來像在六次插入之後迭代器跳轉到字符串的開始並開始插入垃圾。當程序結束時,我得到了一個大雜亂的錯誤。
雖然試圖原因隔離我試圖兩個環路(均未觸摸迭代):
for(i = 0; i < 6; i++)
mask.insert(here, (start + range) - i);
cout << mask << endl;
for(i = 0; i < 7; i++)
mask.insert(here, (start + range) - i);
cout << mask << endl;
第一完成得很好,第二引起分段故障。
有人知道這裏發生了什麼嗎?
你最後一個例子的縮進很容易讓人誤解。 – 2011-02-16 05:12:16