社区
C++ Builder
帖子详情
为什么AnsiString 字符串不能相加?
F117p
2010-04-04 04:28:30
什么情况下String字符串不能加呢?
比如两个字符串Str1="ABCD",Str2="EFGH";结果Str1+Str2结果不等于"ABCDEFGH",却只等于"ABCD"?编译器是CBuilder2009的?简直郁闷了
...全文
694
40
打赏
收藏
为什么AnsiString 字符串不能相加?
什么情况下String字符串不能加呢? 比如两个字符串Str1="ABCD",Str2="EFGH";结果Str1+Str2结果不等于"ABCDEFGH",却只等于"ABCD"?编译器是CBuilder2009的?简直郁闷了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
DLL
字符串
参数做返回值的看法
最近在写几个串口程序,由于以前都是用VB6写ActiveX DLL做通讯 ,里面加入Mscomm32.ocx做为通讯控件,已经很熟练了.可是对于VB的执行效率很是不满意,于是又拿起C++Builder与RS232通讯的书开始啃起来.打算用C++Builder来写上位机与下位机的通讯动态连接库,用VB做界面开发. 由于初次学C++语言,很多时间都不明白指针跟引用的关
delphi写的程序out of memory??
delphi写的程序out of memory? 有如下代码: showmessage(++...++); 总报错:out of memory。原先一直以为是PIDL内存分配出了问题。。。调试了很久才发现,原来是
字符串
太长了。。
String
类型默认时以最大长度255定长; 上面的
字符串
相加
后超过了255长度限制。 改成: str:An
delphi的
字符串
,字符数组
delphi的
字符串
,字符数组 在delphi中,我们可以使用用两种形式声明的
字符串
:
string
声明的
字符串
,结尾不含null。 pchar声明的
字符串
,结尾含有null,这是很多api函数所使用的
字符串
格式,实际上它是一个指向
字符串
的 指针 区别有以下几点: 1:可以用lentgh来测量两种
字符串
中所含有字符个数 2:
string
声明的
字符串
第一个字符的下标为1,而pchar声明
delphi XE7 数组操作中缺少的find(POS)功能
delphi xe7 中对数组操作做了很多扩充,比如加入了类似
字符串
处理的功能。 例如,数组
相加
var A: array of integer; B: TBytes = [1,2,3,4]; //Initialization can be done from declaration begin ... A:=[1,2,3]; // a...
C++ Builder
13,872
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章