在带中文的长字符串中,有多个结束符号#0,这时显示或赋值都会导致字符串被截断,请问,怎么去掉这些结束符号?
用正则函数TRegExp的replace可以去掉它,但却把中文的一些符号弄成乱码了。
用正则函数TRegExp的replace可以去掉它,但却把中文的一些符号弄成乱码了。
解决方案 »
- DELPHI2005中没有MTS数据模块了,我该用什么替代?DBEXPRESS是否支持SYBASE 11。9。2?
- 怎么将access数据导出到FoxBASE+/Dbase III plus表中
- rspt 协议的文件用什么软件下载?
- !!!!!!!我想判断edit1\2\3\4\都是小于500的整数,怎么写?????
- 关于检测串口是否打开的问题
- 判断ttreeview是否存在子项
- 求高手解答--读取listbox里的文字遇到分页字符分页并实现双面打印
- 虚心请教如何更改Memo中文字的行距
- mincer 限你3天内写出这个危害CSDN的小花帽病毒的修复程序!!否则咱们法庭上见!不信是吧?咱走着瞧!!高中毕业,你想和CIH想比呀??技术还差得很远。看哪个大学敢要你!!!
- 为何我的Datetimepicker在对年份进行编辑时会出错?
- 怎么隐藏这种没有窗口标题的软件
- c生成的dll文件用到指针,delphi要如何调用?
if ord(s[i])=0 then
s[i]:='.';
LZ最好先弄清楚这些#0字符是如何产生的(一般调用Windows API才有可能会产生#0字符)。如果这些#0字符是程序中需要保留的,就不应该去掉它们。
C字符串是#0结尾的,因为C字符串是不记录字符串内容的长度的,所以必须定义一个结尾符来表示字符串的结尾。
PASCAL字符串不是, PASCAL字符串除了保存字符串内容之外,还保存了字符串内容的长度值,所以不需要结尾符。
function StrZEROReplace(S: string): string;
var
my1:TstringStream;
SSize:Longint;
newstr,tmp:string;
begin
my1:=TstringStream.Create(s);
SSize:=my1.Size;
my1.Position :=0;
tmp:='';
while my1.Position < SSize do
begin
tmp:=my1.ReadString(1);
if tmp=chr(0) then
begin
continue;
end;
newstr:=newstr+tmp;
end;
my1.Free;
result:=newstr;end;