在C++ BUILDER中使用STL::string的问题

draculamx 2017-12-06 09:49:27

#include <vcl.h>
#include <string>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
bool m_stop;
std::string f;
//string f;
f.append(0,2);
f[0]=1;
f[1]=3;
//f="cd";

//char f[2]={1,3};
//char f=2;

//string s;
std::string s;
s.append(0,5);
s[0]=1;
s[1]=2;
s[2]=1;
s[3]=3;
s[4]=1;
//s="abcde";

unsigned int pp=0;
pp=s.find(f);



m_stop=false;
}


很简单的东西,在一个std::string中查找指定的内容,这段代码在VC是没有问题的,但是在C++ BUILDER下,查找结果始终是:找不到,也就是返回 npos。。。

如果把字符串中的内容全部换成字符:也就是类似于“abcdef”这种,倒是能正常工作。。但我换成数字怎么就不行呢。。。

真是活久见啊。。。受不了了,找了半天也找不到原因
IDE是 10.2

照说C++ BUILDER对STL的支持应该是很好的呀。。。怎么会这样。。。
...全文
640 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
draculamx 2017-12-08
引用 10 楼 DelphiGuy 的回复:
因为你把append的参数搞反了。
一口鲜血~~~
  • 打赏
  • 举报
回复
因为你把append的参数搞反了。
  • 打赏
  • 举报
回复
ooolinux 2017-12-07
为什么不用Ansi或UnicodeString呢?
  • 打赏
  • 举报
回复
draculamx 2017-12-07
来人啊..我要死了啊...
  • 打赏
  • 举报
回复
draculamx 2017-12-07
引用 8 楼 DelphiGuy 的回复:
f.append(0,2);改成f.resize(2); s.append(0,5);改成s.resize(5);
可以了,确实只需要改这两句就可以正常工作了,双击666!!! 但我还是想知道为什么。。。。
  • 打赏
  • 举报
回复
f.append(0,2);改成f.resize(2); s.append(0,5);改成s.resize(5);
  • 打赏
  • 举报
回复
draculamx 2017-12-07
引用 4 楼 u010165006 的回复:
s[0]=1; 这个是ascii码? 另外string需要'\0'字符吗?
我在XE10.2和VS里面都试过,std::string 是可以用来存储 byte的,不仅限于ASCII字符,我实际上就是把它作为一个字节容器来使用

std::string s;
    s.append(0,5);
    s[0]=1;
    s[1]=2;
    s[2]=0;  // "\0’
    s[3]=3;
    s[4]=1;
    s.size();
这个代码,s的大小是5 当然,如果你调用 s.c_str(),那么只会得到0之前的两个元素,因为c_str()方法,是以数字0,也就是'\0'来作为结尾的
  • 打赏
  • 举报
回复
draculamx 2017-12-07
这段代码在 Visual studio c++ 2008里面是可以工作的,不做任何修改,可以得到正确结果,为什么在 XE10.2里面不行。。。。
  • 打赏
  • 举报
回复
ooolinux 2017-12-07
string属于标准库,但不属于STL吧?标准库>STL
  • 打赏
  • 举报
回复
ooolinux 2017-12-07
s[0]=1; 这个是ascii码? 另外string需要'\0'字符吗?
  • 打赏
  • 举报
回复
hongss 2017-12-07
换成数字同样可以,但是还是以 s="12345";这样的格式才行~~~
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ Builder
加入

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2017-12-06 09:49
社区公告
暂无公告