为什么AnsiString 字符串不能相加?

F117p 2010-04-04 04:28:30
什么情况下String字符串不能加呢?
比如两个字符串Str1="ABCD",Str2="EFGH";结果Str1+Str2结果不等于"ABCDEFGH",却只等于"ABCD"?编译器是CBuilder2009的?简直郁闷了
...全文
617 40 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxzeros 2011-05-24
  • 打赏
  • 举报
回复
我也遇到同样的问题啊!楼主你解决了没?
wyhufo1106 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 jone7319 的回复:]
这么小一个问题,竟然有这么多人参与,而且重复的不在少数!
[/Quote]

小错误用100分的!!!!厉害!!!!!其实即使没有分大家也会来将自己的见解分享一下的!!!
我运行了13楼的代码没有问题!
如下的代码也同样没有问题:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString str1 = "ABCD";
String str2 = "EFGH";
ShowMessage(str1+str2);
}
xjq2003 2010-05-04
  • 打赏
  • 举报
回复
讨论够热烈
jone7319 2010-05-03
  • 打赏
  • 举报
回复
这么小一个问题,竟然有这么多人参与,而且重复的不在少数!
truelove7283159 2010-04-29
  • 打赏
  • 举报
回复
AnsiString s;
s = "abcd";

s.SetLength(20);// 就是这一句,还有可能是指针给指乱了.指乱了不考虑.

AnsiString s1("defgh");

s = s + s1;
ShowMessage(s);
------------------------------------------
1 AnsiString 的下标其实是从1开始substring(1,xx);
2 AnsiString 在内存中实际上会给最右边自动补0x00
3 AnsiString 是由长度决定的,这个字符串里面可以包含任意多个0x00, 但是如果要按照PCHAR格式去用的话, 那么它可能就认第一个0x00就认为字符串结束了.

其他的我没说明白的看help中关于AnsiString 的说明.
AnsiString is the C++Builder analog for the Object Pascal long string type.
lghndyz 2010-04-28
  • 打赏
  • 举报
回复
这种错误太强了!!
honlyn 2010-04-28
  • 打赏
  • 举报
回复
又懂了不少东西
e_board 2010-04-27
  • 打赏
  • 举报
回复
这是大字节问题吧。有unicode之后总是出现一些问题
用字符串时最好
String str=L"ABC";
String str1;
str1.printf(L"%s",str.c_str());
两个字符串直接相加是可以的,不要将一个AnsiString和一个String直接操作。好像有事有问题
乱七八糟说了一通自己的感受,不知道对你有用不
truelove7283159 2010-04-27
  • 打赏
  • 举报
回复
针对楼主的问题 我觉得在执行这个操作之前你的程序堆栈已经收到破坏了。
你自己以为你的数据串没有动过,其实别的地方执行部成功 越界操作早给你修改了。修改的洽洽就是最后的位。

至于上面说的, 我明天些个程序看看了。
truelove7283159 2010-04-27
  • 打赏
  • 举报
回复
最近去面试了一下,用BCB也很久了.
突然人家问了个问题, 搞得我回来猛翻书,才发现了一个问题. 一直存在一直被忽略.
AnsiString 以前我知道INDEX从1开始的,哪个时候没有深入研究. 根据哪个面试题目
发现了AnsiString是DELPHI中个好东西,其实认的是length, 也就是说字符串中间可以有
很多个'\0'(0x00).只有当pchar访问的时候才认那个'\0'。看了下资料,自己没动手实验呢。
根据资料的说的情况就有可能有高论说的现象出现。


[Quote=引用 22 楼 ppower 的回复:]
str1="ABCDXXXX";
str2="EFGH";
char *p = str1.c_str();
p[4] = 0;
ShowMessage(str1+str2);//str1+str2 == "ABCD\0XXXEFGH" ;顯示出來只有"ABCD";
注意一下是否這種情況引起的。
[/Quote]
blueice12 2010-04-23
  • 打赏
  • 举报
回复
楼主的代码应该类似于:
String s1 = "ABCD";
String s2 = "EFGH";
s1 + s2;
ShowMessage(s1);

把s1 + s2改成s1+=s2就OK了。
hongss 2010-04-22
  • 打赏
  • 举报
回复
No problem !
tonny1025 2010-04-22
  • 打赏
  • 举报
回复
我的6也没问题啊。是不是你的工程定义有问题?
sczyq 2010-04-21
  • 打赏
  • 举报
回复
Str1+=Str2; 就对了。
sundl2268 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 ppower 的回复:]
str1="ABCDXXXX";
str2="EFGH";
char *p = str1.c_str();
p[4] = 0;
ShowMessage(str1+str2);//str1+str2 == "ABCD\0XXXEFGH" ;顯示出來只有"ABCD";
注意一下是否這種情況引起的。
[/Quote]
对,这种情况就截断字符串了
arlenllw 2010-04-21
  • 打赏
  • 举报
回复
AnsiString重载了+操作符,str1+str2 就是字符串1和字符串2的链接,应该不会有问题啊,楼主的情况能给的详细点吗?
ydlchina 2010-04-20
  • 打赏
  • 举报
回复
推荐2010
wyhufo1106 2010-04-20
  • 打赏
  • 举报
回复
我用的BCB6没的问题。配置问题我不懂来学习。
xyxuliang 2010-04-20
  • 打赏
  • 举报
回复
Embarcadero® RAD Studio 2010 Version 14.0.3615.26342
String str1 = "ABCD";
String str2 = "EFGH";
ShowMessage(str1+str2);

没问题。
关山路遥 2010-04-20
  • 打赏
  • 举报
回复
无图无真相啊
加载更多回复(19)

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧