社区
C++ Builder
帖子详情
AnsiString是否有长度的限制?
sdyqingdao
2004-05-05 11:08:28
我的一段代码,莫名其妙的出现问题。由于这一段是重复执行的,只有一种情况出问题,这种情况唯一特别的地方是字多,约300个汉字,没有特殊字符。代码中使用了AnsiString.c_str()。
...全文
289
14
打赏
收藏
AnsiString是否有长度的限制?
我的一段代码,莫名其妙的出现问题。由于这一段是重复执行的,只有一种情况出问题,这种情况唯一特别的地方是字多,约300个汉字,没有特殊字符。代码中使用了AnsiString.c_str()。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
robbyzi
2004-05-11
打赏
举报
回复
用WideString不行吗??试试
agtian
2004-05-11
打赏
举报
回复
如果不行,请和我联系
agtian
2004-05-11
打赏
举报
回复
为什么非得用.c_str,好的方法多呢,char * buf[1024],然后sprintf(buf,“%s”,MyString);
不是很好吗?
czliuxi
2004-05-11
打赏
举报
回复
不知道你代码怎么样子,如果你要用substring的话,需要判断当前的substring的截断处是不是汉字的双字的头码,不是可以截断,是的话截断处要加一或退一,这样可以解决乱码问题, 这个是我写过的代码,其中的函数ByteType就是判断是不是头码的,再不清楚可以在bc的帮助中查看关于bytetype函数的说明 其返回数值1为是双字节的头码,2为尾码,0为其为单字
if(Value.Length()>=26)
{TMbcsByteType efg=ByteType(Value,26);
if( efg==1)
QRLabel41->Caption=Value=Value.SubString(1,27)+' '+Value.SubString(28,Value.Length()) ;
else QRLabel41->Caption=Value=Value.SubString(1,26)+' '+Value.SubString(27,Value.Length()) ;
}
sdyqingdao
2004-05-11
打赏
举报
回复
我日!
JackLucifer
2004-05-11
打赏
举报
回复
ByteType是BCB的函数,还是C/C++中就有的?
sdyqingdao
2004-05-08
打赏
举报
回复
up
xiaoshi0
2004-05-08
打赏
举报
回复
长度2G
sdyqingdao
2004-05-08
打赏
举报
回复
很急啊,没人回答吗
叶子哟
2004-05-05
打赏
举报
回复
char *你分配内存了吗把详细代码贴出来
sdyqingdao
2004-05-05
打赏
举报
回复
问题出在AnsiString.c_str(),我用代码试过了,好像char*最多只能255。
我实在这样解决的,用AnsiString.SubString()分解为多个子字符串,但问题又出来了!!
出现乱码,就是大家经常遇到的中文的问题!不知道怎么解决呢?
耙子
2004-05-05
打赏
举报
回复
AnsiString 的理论长度限制是2G字节,足够了吧?
贴出你的代码。
ch_builder
2004-05-05
打赏
举报
回复
他的长度应该足够我们用了,用不着关心这个:)
sdyqingdao
2004-05-05
打赏
举报
回复
matq2008(叶子.net) , pazee(耙子)(灵感点亮生活) 你们好!
代码分为两部分,函数ReplaceText是发这个帖子以前的样子,程序中它被多次调用,只有下面这次替换有问题。
1:
TempString = qr->FieldByName("WGH")->AsString;
ReplaceText("#HazardGoodNO#",TempString, WordRange);
2:函数ReplaceText部分:
bool TMainForm::ReplaceText(AnsiString FindTexts, AnsiString ReplaceTexts, Variant WrdRang)
{
TVariant RepPara=wdReplaceAll;
TVariant EmptyPara=EmptyParam;
WrdRang.OlePropertyGet("Find").OlePropertySet("Text",FindTexts.c_str());
WrdRang.OlePropertyGet("Find").OlePropertyGet("Replacement").OlePropertySet("Text",ReplaceTexts.c_str());
WrdRang.OlePropertyGet("Find").OlePropertySet("Forward", true);
WrdRang.OlePropertyGet("Find").OlePropertyGet("Replacement").OleFunction("ClearFormatting");
WrdRang.OlePropertyGet("Find").OleFunction("Execute",&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,&RepPara,&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara);
return true;
}
【升级】易语言文件解锁(关闭句柄法)-易语言
前言 上一次发布过的程序:【首发】检测文件的占用,具有学习和商业价值(By超级用户),可以使用,仿电脑管家 正文 对于怎么枚举文件句柄 ,上一帖子对此有介绍,核心代码大概如下:如果 (ZwQueryObject (handle, #ObjectTypeInformation, unicode, 0, size) ≠ #STATUS_INVALID_HANDLE )' 只要不是无效的,为什么,详细看下面的注释 ' 参数 ' Handle ' 对象的一个句柄来获取信息。 ' ObjectInformationClass ' 指定一个OBJECT_INFORMATION_CLASS返回值的类型决定了信息在ObjectInformation缓冲区。 ' ObjectInformation ' 一个指向caller-allocated缓冲接收请求的信息。 ' ObjectInformationLength ' 指定的大小,以字节为单位,ObjectInformation缓冲区。 ' ReturnLength ' 一个指向变量的指针,接收的大小,以字节为单位,请求的关键信息。如果NtQueryObject STATUS_SUCCESS返回,返回的变量包含的数据量。如果NtQueryObject返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL,您可以使用变量的值来确定所需的缓冲区大小。 ' 返回值 ' NtQueryObject返回STATUS_SUCCESS或适当的错误状态。可能的错误状态码包括以下: ' 返回代码 描述 ' STATUS_ACCESS_DENIED ' 有足够的权限来执行该cha询。 ' STATUS_INVALID_HANDLE ' 提供对象句柄无效。 ' STATUS_INFO_LENGTH_MISMATCH ' 信息
长度
不足以容纳数据。 unicode = 取空白字节集 (size) ZwQueryObject (handle, #ObjectTypeInformation, unicode, size, 0)' 读取信息的unicode文本 RtlUnicodeStringTo
AnsiString
(ansi, unicode, 真)' 编码转换 ' RtlUnicodeStringTo
AnsiString
例程将给定Unicode字符串转换成一个ANSI字符串。 str = 指针到文本 (ansi.Buffer) ' RtlFree
AnsiString
常规版本存储由RtlUnicodeStringTo
AnsiString
分配。 ' 参数 '
AnsiString
' 指针ANSI字符串缓冲区由RtlUnicodeStringTo
AnsiString
以前分配的。 RtlFree
AnsiString
(ansi) str = “无法获取”' 无效的怎么获取…… 返回 (str) 这一次呢更新了一个RemoteCloseHandle ,大概的原理是什么呢? 同时也采用了一些比较骚的方法,这种方法的
限制
较多,但是对于32位进程就很有效果。 NtClose在MSDN的大概介绍 1. NtClose is a generic routine that operates on any type of object. 2. Closing an open object handle causes that handle to become invalid. The system also decrements the handle count for the object and checks whether the object can be deleted. The system does not actually delete the object until all of the object's handles are closed and no referenced pointers remain. 3. A driver must close every handle that it opens as soon as the handle is no longer required. Kernel handles, which are those that are opened by a system thread or by specifying the OBJ_KERNEL_HANDLE flag, can be closed only when the previous processor mo
C++ Builder
AnsiString
类
AnsiString
类 C++ Builder
AnsiString
类介绍和使用 介绍
AnsiString
类之前,先要介绍一些背景知识。VCL大量利用Pascal长字串数据类型,几乎所有基于文本的VCL属性都采用Pascal长 字串。例如,Text、Name和Caption属性都是Pascal长字串属性。VCL的许多构件方法和事件处理函数也采用Pascal长字串。 关于Pascal长字串数据类型要注意两点。第一,Pascal长字串是真正的语言数据类型,而不象C/C++中一样只是个字符数组。
java如何传参数delphi
ansistring
_delphi的string和
ansistring
区分
字符串是代表一组字符的变量类型,每一种语言都有自己的字符串类型的存储和使用方法。Pascal类型有下列几种不同的字符串类型来满足程序的要求:
AnsiString
这是Pascal缺省的字符串类型,它由AnsiChar 字符组成,其
长度
没有
限制
,同时与null结束的字符串相兼容。ShortString 保留该类型是为了向后兼容Delphi1.0,它的
长度
限制
在255个字符内。WideSt...
AnsiString
类
AnsiString
类是BCB中最常见类之一,了解它对以后深入学习BCB大有帮助。 介绍
AnsiString
类之前,先要介绍一些背景知识。VCL(Visual Component Library 可视化组件库)大量利用Pascal长字串数据类型,几乎所有基于文本的VCL属性都采用Pascal长字串。例如,Text、Name和Caption属性都是Pascal长字串属性。VCL的许多构件方法和事件
delphi中
AnsiString
、WideString区别
字符串是代表一组字符的变量类型。其中ShortString
长度
最大为255个字符
AnsiString
字符串是delphi中默认的字符串类型,由AnsiChar字符组成,不
限制
长度
,并兼容Null结尾的字符串 WideString除了有WideChar字符组成之外,其余功能和
AnsiString
一样; pchar是NUll结尾的字符串指针与C里面的char*,lpstr类型一样 pansi...
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章