W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #1 我想在源代码中表示6个0的ASCII码:"/0/0/0/0/0/0"(AnsiString), 可是编译器自动把它当作普通字符串(char),第一个0之后的东西自动省略了。 怎么办?
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #3 不是字符(数字)“0”!而是ASCII码的0,0在char中表示字符串结束。 我需要6个“/0”。
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #5 VC中是可以的,_T("") 就不知道C++build是用什么方法了?!
H HD_Copy Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #6 应该是"/0x00"或"/0x0",都可以 又如下面的语句是将字符串str中的回车换行符转换为Html语法中的<BR> TReplaceFlags Flags ; Flags << rfReplaceAll; str = StringReplace(str, "/x0D/x0A", "<BR>", Flags);
应该是"/0x00"或"/0x0",都可以 又如下面的语句是将字符串str中的回车换行符转换为Html语法中的<BR> TReplaceFlags Flags ; Flags << rfReplaceAll; str = StringReplace(str, "/x0D/x0A", "<BR>", Flags);
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #7 “/0”、“/x0”、“/0x0”这些都是不行的。 因为0有特殊含义,其它ASCII码都可以。 编译器自动把第一个0后的内容去掉。
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #8 AnsiString s1 = "/0/0/0/0/0/0"; //不行,编译器会把s1视为NULL,不分配数据存储空间 char s2[6] = "/0/0/0/0/0/0"; //OK,尽管s2里什么也有效字符也没有,但它已经分配了数据存储空间 你得讲清楚你想怎么用,我们才好分析出该如何解决。
AnsiString s1 = "/0/0/0/0/0/0"; //不行,编译器会把s1视为NULL,不分配数据存储空间 char s2[6] = "/0/0/0/0/0/0"; //OK,尽管s2里什么也有效字符也没有,但它已经分配了数据存储空间 你得讲清楚你想怎么用,我们才好分析出该如何解决。
K kkyy Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #10 对啊,char s[6] = "/0/0/0/0/0/0"; 就行了,你是不是想在文件中写入这些东西啊,没问题啊。
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #11 不是,我是想得到这样一个AnsiString字符串: “hello /xff/x0/xff Hello world!/n”,可是编译器自动把 字符串当作“hello /xff”来处理了,后面的字符被删除。 虽然可以使用: Move("hello /xff",buf,7); Move("/xff Hello world!/n",&buf[8],15);这样太烦了!且容易出错! VC就可以这样做:_T(“hello /xff/x0/xff Hello world!/n”),_T表示AnsiString, 而不是char [] C++build用等效的用法吗??
不是,我是想得到这样一个AnsiString字符串: “hello /xff/x0/xff Hello world!/n”,可是编译器自动把 字符串当作“hello /xff”来处理了,后面的字符被删除。 虽然可以使用: Move("hello /xff",buf,7); Move("/xff Hello world!/n",&buf[8],15);这样太烦了!且容易出错! VC就可以这样做:_T(“hello /xff/x0/xff Hello world!/n”),_T表示AnsiString, 而不是char [] C++build用等效的用法吗??
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #12 这个问题应该是源于AnsiString的处理方式有关的,可以叫做AnsiString的一个附作用吧(不 应该叫Bug)。当给AnsiString赋值时,它并不拷贝字符串的数据,而只是将其数据地址指向 被引用的对象,因此处理到'/0'时就会认为字符串已经结束了。 建议不要用'/0'作为一个字符串间各段子串的分隔符。不瞒你说,我实在不知道这样的字符 串该如何使用——不能用strlen, strcpy, strcat, sprintf...所有的C字符串处理函数都不 能正确地用于这样的字符串,你根本不能把它当字符串来处理,当然也就无法用于AnsiString了。
这个问题应该是源于AnsiString的处理方式有关的,可以叫做AnsiString的一个附作用吧(不 应该叫Bug)。当给AnsiString赋值时,它并不拷贝字符串的数据,而只是将其数据地址指向 被引用的对象,因此处理到'/0'时就会认为字符串已经结束了。 建议不要用'/0'作为一个字符串间各段子串的分隔符。不瞒你说,我实在不知道这样的字符 串该如何使用——不能用strlen, strcpy, strcat, sprintf...所有的C字符串处理函数都不 能正确地用于这样的字符串,你根本不能把它当字符串来处理,当然也就无法用于AnsiString了。
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-22 #13 可是,VC和DELPHI都可以正确使用,难道C++build就不行了吗?
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-23 #14 都行?我试了的结果是不行(VC),你把代码贴出来分析一下。
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-24 #15 C#的代码: String s; s="ABC /0 ABC"; button1.Text=s.Substring(5,3); 得到的是" AB",说明/0后面的还有效. 如果是delphi,"ABC " + #0 + " ABC",也有效. 但C++build就不行.
C#的代码: String s; s="ABC /0 ABC"; button1.Text=s.Substring(5,3); 得到的是" AB",说明/0后面的还有效. 如果是delphi,"ABC " + #0 + " ABC",也有效. 但C++build就不行.
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-24 #16 我只能说这就是C/C++处理字符串的特点,你在VC下试一下吧,也不行的。
S Sachow Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-24 #18 这是在VC7下编译通过的代码,但我不知道_T放在哪里能够实现你所说的效果。 void CStringTstDlg::OnBnClickedOk() { int l; CString S1 = _T("Hello /x0 World/x0!"); l = S1.GetLength(); //l=6 MessageBox(S1); OnOK(); }
这是在VC7下编译通过的代码,但我不知道_T放在哪里能够实现你所说的效果。 void CStringTstDlg::OnBnClickedOk() { int l; CString S1 = _T("Hello /x0 World/x0!"); l = S1.GetLength(); //l=6 MessageBox(S1); OnOK(); }
W wenjinshan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-24 #19 int l; string S1 = "Hello /x0 World/x0!"; l = S1.Length; //l=15 button1.Text=S1; MessageBox是不行的,因为它不处理字符串'/0'后面的,试试上面的代码吧. 可以不用_T
int l; string S1 = "Hello /x0 World/x0!"; l = S1.Length; //l=15 button1.Text=S1; MessageBox是不行的,因为它不处理字符串'/0'后面的,试试上面的代码吧. 可以不用_T
H HORNEY Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-24 #20 pascal sample Dchar; GetMem(pnt,6); for i:=1 to 6do begin Pnt^=0; inc(Pnt); end; D:=Pnt;