社区
C++ Builder
帖子详情
为什么AnsiString 字符串不能相加?
F117p
2010-04-04 04:28:30
什么情况下String字符串不能加呢?
比如两个字符串Str1="ABCD",Str2="EFGH";结果Str1+Str2结果不等于"ABCDEFGH",却只等于"ABCD"?编译器是CBuilder2009的?简直郁闷了
...全文
617
40
打赏
收藏
为什么AnsiString 字符串不能相加?
什么情况下String字符串不能加呢? 比如两个字符串Str1="ABCD",Str2="EFGH";结果Str1+Str2结果不等于"ABCDEFGH",却只等于"ABCD"?编译器是CBuilder2009的?简直郁闷了
复制链接
扫一扫
分享
转发到动态
举报
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)
BCB中
Ansi
String
类方法总结
Ansi
String
类是BCB中最常见类之一,了解它对以后深入学习BCB大有帮助原来关于这个类的提出的问题有很多,现总结如下。加上我个人的经验,凑出了一篇关于这个类的最常用方法属性的介绍,希望能对各位有所帮助 常用方法: 1. char* c_str() 返回一个
字符串
指针,他指向的内容和
Ansi
String
中包含的
字符串
的内容一致(BCB帮助中就是是这样解释这个方法的,关于它更
delphi的
字符串
,字符数组
delphi的
字符串
,字符数组 在delphi中,我们可以使用用两种形式声明的
字符串
:
string
声明的
字符串
,结尾不含null。 pchar声明的
字符串
,结尾含有null,这是很多api函数所使用的
字符串
格式,实际上它是一个指向
字符串
的 指针 区别有以下几点: 1:可以用lentgh来测量两种
字符串
中所含有字符个数 2:
string
声明的
字符串
第一个字符的下标为1,而pchar声明
DelphiXE10.3中字符
相加
导致溢出的问题
测试环境:DelphiXE10.3 const s1:
ansi
string
= #100#200; s2:
ansi
string
= #100 + #200; begin ShowMessage(IntToStr(Ord(s1[2]))); ShowMessage(IntToStr(Ord(s2[2]))); end; 原本一直以为上面代码出来的结果应该是一样的。但是在X...
Delphi
Ansi
String
与 P
Ansi
Char
http://www.newsmth.net/nForum/#!article/Delphi/83 发信人: flier (小海 //爱喝可乐^_^), 信区: Delphi标题: 关于Delphi中
string
的一些理解 :)发信站: BBS 水木清华站 (Wed Nov8 16:13:58 2000)delphi使用的object pas...
字符串
Hash散列表设计
原贴:http://wangfulong888.spaces.live.com/Blog/cns!1prHQ8LyFhaJkVAwBy_o8DHw!126.entry
字符串
Hash散列表设计 By WangFL一、常见
字符串
hash函数1、ASCII码
相加
基本思想:将字符
C++ Builder
13,871
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章