是STL的错误吗?

碰到很奇怪的问题
string::size_type nlen = str.size();   // 得到1108
str.erase(pos, 3);
这句出错,跟踪进去,是_Split();里面得到了错误的_Len导致的。
assign(_Temp);里面的_Tr::length(_S)得到了一个788,而之前调用str.size()得到的是1108,这就导致后面
_Tr::move(_Ptr + _P0, _Ptr + _P0 + _M,
                _Len - _P0 - _M)
的时候_Len - _P0 - _M的值已经为负数,经过仔细研究,发现这个字符串是一个包含/0的长字符串(其值是由DTL库从Oracle数据库中取出),1108是它真正的长度,788正好是/0所在的位置,就是说,对于这种数据,不能用string类来处理。

但是,随后我又写了一个试验程序:
     string str = "测试/0;/r/nA;/r/n中文中文;/r/n<E>/r/n";
     string::size_type srclen=str.size();
srclen得到4
这又说明size()方法是能处理/0的。又是一个百思不得其解。

原始串如下:
00E79C61  52 65 63 65 69 76 65 64 3A 20 66 72 6F 6D  Received: from
00E79C6F  20 31 32 36 2E 63 6F 6D 20 28 5B 31 32 35   126.com ([125
00E79C7D  2E 39 31 2E 31 34 31 2E 32 31 36 5D 29 0D  .91.141.216]).
00E79C8B  0A 09 62 79 20 6E 61 6E 6F 70 72 6F 62 65  .    by nanoprobe
00E79C99  73 2E 63 6F 6D 20 28 38 2E 31 33 2E 31 2F  s.com (8.13.1/
00E79CA7  38 2E 31 33 2E 31 29 20 77 69 74 68 20 45  8.13.1) with E
00E79CB5  53 4D 54 50 20 69 64 20 6D 30 44 36 78 48  SMTP id m0D6xH
00E79CC3  50 76 30 30 38 38 36 37 0D 0A 09 66 6F 72  Pv008867..    for
00E79CD1  20 3C 78 3E 3B 20 53 75 6E 2C 20 31 33 20   <x>; Sun, 13
00E79CDF  4A 61 6E 20 32 30 30 38 20 30 31 3A 35 39  Jan 2008 01:59
00E79CED  3A 32 32 20 2D 30 35 30 30 0D 0A 4D 65 73  :22 -0500..Mes
00E79CFB  73 61 67 65 2D 49 64 3A 20 3C 32 30 30 38  sage-Id: <2008
00E79D09  5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F  ______________
00E79D17  5F 5F 5F 5F 5F 38 38 36 37 40 6E 61 6E 6F  _____8867@nano
00E79D25  70 72 6F 62 65 73 2E 63 6F 6D 3E 0D 0A 58  probes.com>..X
00E79D33  2D 4F 72 69 67 3A 20 5B 31 32 35 2E 39 31  -Orig: [125.91
00E79D41  2E 31 34 31 2E 32 31 36 5D 0D 0A 58 2D 41  .141.216]..X-A
00E79D4F  75 74 68 65 6E 74 69 63 61 74 69 6F 6E 2D  uthentication-
00E79D5D  57 61 72 6E 69 6E 67 3A 20 6E 61 6E 6F 70  Warning: nanop
00E79D6B  72 6F 62 65 73 2E 63 6F 6D 3A 20 6E 61 6E  robes.com: nan
00E79D79  6F 70 72 6F 62 20 6F 77 6E 65 64 20 70 72  oprob owned pr
00E79D87  6F 63 65 73 73 20 64 6F 69 6E 67 20 2D 62  ocess doing -b
00E79D95  73 0D 0A 46 72 6F 6D 3A 20 3D 3F 47 42 32  s..From: =?GB2
00E79DA3  33 31 32 3F 42 3F 77 4F 37 50 79 4D 6E 36  312?B?wO7PyMn6
00E79DB1  3F 3D 20 3C 6C 62 67 5F 35 32 30 40 31 32  ?= <lbg_520@12
00E79DBF  36 2E 63 6F 6D 3E 0D 0A 53 75 62 6A 65 63  6.com>..Subjec
00E79DCD  74 3A 20 3D 3F 47 42 32 33 31 32 3F 42 3F  t: =?GB2312?B?
00E79DDB  79 63 2B 36 6F 37 76 6A 77 66 71 37 34 62  yc+6o7vjwfq74b
00E79DE9  7A 47 79 73 4C 4F 38 63 76 35 3F 3D 0D 0A  zGysLO8cv5?=..
00E79DF7  54 6F 3A 20 78 0D 0A 43 6F 6E 74 65 6E 74  To: x..Content
00E79E05  2D 54 79 70 65 3A 20 74 65 78 74 2F 70 6C  -Type: text/pl
00E79E13  61 69 6E 3B 63 68 61 72 73 65 74 3D 22 47  ain;charset="G
00E79E21  42 32 33 31 32 22 0D 0A 52 65 70 6C 79 2D  B2312"..Reply-
00E79E2F  54 6F 3A 20 6C 62 67 5F 35 32 30 40 31 32  To: lbg_520@12
00E79E3D  36 2E 63 6F 6D 0D 0A 44 61 74 65 3A 20 53  6.com..Date: S
00E79E4B  75 6E 2C 20 31 33 20 4A 61 6E 20 32 30 30  un, 13 Jan 200
00E79E59  38 20 31 35 3A 30 33 3A 35 39 20 2B 30 38  8 15:03:59 +08
00E79E67  30 30 0D 0A 58 2D 50 72 69 6F 72 69 74 79  00..X-Priority
00E79E75  3A 20 33 0D 0A 58 2D 4D 61 69 6C 65 72 3A  : 3..X-Mailer:
00E79E83  20 46 6F 78 4D 61 69 6C 20 34 2E 30 20 62   FoxMail 4.0 b
00E79E91  65 74 61 20 32 20 5B 63 6E 5D 0D 0A 58 2D  eta 2 [cn]..X-
00E79E9F  53 70 61 6D 43 6F 70 2D 43 68 65 63 6B 65  SpamCop-Checke
00E79EAD  64 3A 20 36 36 2E 38 34 2E 32 32 2E 31 32  d: 66.84.22.12
00E79EBB  36 20 31 32 35 2E 39 31 2E 31 34 31 2E 32  6 125.91.141.2
00E79EC9  31 36 20 0D 0A 0D 0A 0D 0A 20 20 20 20 20  16 ......     
00E79ED7  20 20 20 20 20 20 20 20 20 20 20 20 20 20                
00E79EE5  B4 FA 20 B0 EC 20 B7 A2 20 C6 B1 28 31 33  代 办 发 票(13
00E79EF3  39 32 36 35 31 35 33 32 33 29 0D 0A 20 20  926515323)..  
00E79F01  20 D3 C9 CE D2 CB F9 B4 FA B0 EC B8 F7 C0   由我所代办各.
00E79F0F  E0 B7 A2 C6 B1 BF C9 CF ED CA DC B4 F3 B7  喾⑵笨上硎艽蠓
00E79F1D  F9 B5 CD CB B0 3B 20 20 0D 0A 20 20 20 B4  退.;  ..   .
00E79F2B  FA B0 EC B8 F7 B5 D8 B7 FE CE F1 C0 E0 28  旄鞯胤窭.(
00E79F39  D7 C9 D1 AF B7 D1 2C D7 A1 CB DE B7 D1 2C  咨询费,住宿费,
00E79F47  BB E1 CE F1 B7 D1 2C B9 E3 B8 E6 B7 D1 2C  会务费,广告费,
00E79F55  B7 BF D7 E2 0D 0A B7 D1 29 A3 BB B9 A4 B3  房租..费);工.
00E79F63  CC C0 E0 28 D7 B0 E4 EA B7 D1 2C C0 CD CE  汤.(装潢费,劳.
00E79F71  F1 B7 D1 2C 00 00 00 BD A8 D6 FE B0 B2 D7  穹.,...建筑安.
00E79F7F  B0 29 BC B0 C9 CC C6 B7 A1 A2 C9 CC D2 B5  .)及商品、商业
00E79F8D  A1 A2 B9 A4 0D 0A D2 B5 CF FA CA DB C0 E0  、工..业销售类
00E79F9B  B5 C8 B7 A2 C6 B1 B0 B4 31 2E 35 25 CA D5  等发票按1.5%收
00E79FA9  B7 D1 A3 AC CD AC CA B1 D3 D0 C8 AB B9 FA  费,同时有全国
00E79FB7  B8 F7 B4 F3 B3 C7 CA D0 B9 AB CB BE B4 FA  各大城市公司代
00E79FC5  0D 0A C0 ED B5 C4 C6 B1 BE DD 3B 0D 0A D4  ..理的票据;...
00E79FD3  F6 D6 B5 CB B0 B0 B4 36 25 B4 FA BF AA 3B  鲋邓鞍.6%代开;
00E79FE1  0D 0A 20 20 20 D0 C5 D3 FE B3 D0 C5 B5 3A  ..   信誉承诺:
00E79FEF  CF C8 CE DE CC F5 BC FE BD BB BB F5 B8 F8  先无条件交货给
00E79FFD  B9 F3 CB BE C8 B7 C8 CF BA F3 D4 D9 B8 B6  贵司确认后再付
00E7A00B  BF EE 21 28 C4 FA CE DE D0 E8 0D 0A B3 D0  款!(您无需..承
00E7A019  B5 A3 C8 CE BA CE BE AD BC C3 C9 CF B5 C4  担任何经济上的
00E7A027  B7 E7 CF D5 29 0D 0A C1 AA 20 CF B5 20 C8  风险)..联 系 .
00E7A035  CB 3A 20 C0 EE CF C8 C9 FA 20 20 20 20 20  .: 李先生     
00E7A043  20 20 20 20 20 20 20 20 20 20 20 20 20 20                
00E7A051  20 20 20 30 32 31 2D 33 31 32 36 32 33 33     021-3126233
00E7A05F  39 20 20 0D 0A CA D6 20 20 20 20 BB FA 3A  9  ..手    机:
00E7A06D  20 31 33 39 32 36 35 31 35 33 32 33 0D 0A   13926515323..
00E7A07B  0D 0A 20 20 20 20 20 20 20 20 20 20 20 20  ..            
00E7A089  20 20 20 20 20 20 20 20 20 20 20 20 20 20                
00E7A097  20 20 20 20 20 20 C9 CF BA A3 BB E3 C1 FA        上海汇龙
00E7A0A5  BB E1 BC C6 CA C2 CE F1 CB F9 0D 0A 0D 0A  会计事务所....
00E7A0B3  0D 0A 00 CD CD CD CD CD CD CD CD CD CD CD  ...屯屯屯屯屯.
00E7A0C1  FD FD FD FD F0 AD BA 0D F0 AD BA 0D F0 AD  瓠..瓠..瓠
00E7A0CF  BA AB AB AB AB AB AB AB AB 00 00 00 00 00  韩......
00E7A0DD  00 00 00 0A 00 95 00 EE 04 EE 00 90 5D E7  ...........怾.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值