前几天delphi还好好
今天突然就不正常了
具体表现是ansistring这个数据类型,变成了string
ansistring=string了
定义a:ansistirng;
访问a.c_str();
等等ansistring的方法都会出错。这是为何?

解决方案 »

  1.   

    Type         Maximum length   Memory required Used for
    ------------------------------------------------------------------------------------------
    ShortString 255 characters 2 to 256 bytes backward compatibility
    AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
    WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applicationsAnsiString, sometimes called the long string, is the preferred type for most purposes.
    String types can be mixed in assignments and expressions; the compiler automatically performs required conversions. But strings passed by reference to a function or procedure (as var and out parameters) must be of the appropriate type. Strings can be explicitly cast to a different string type (see Typecasts).
    The reserved word string functions like a generic type identifier. For example,var S: string;creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H-} directive to turn string into ShortString.
      

  2.   

    楼上那堆只是说string类型可能是ansistring,也可能是shortstring
    没说ansistring类型可能变为string类型
      

  3.   

    AnsiString delphi缺省字符串类型 
    WideString 功能上类似于AnsiString,但它是由WideChar字符组成的,也就是。 Str1:string;// 编译器认为S的类型是AnsiString 
    当然,能用编译开关$ H来将AnsiString 类型定义为ShortString,当$ H编译开关的值为负时,S变量 
    是ShortString类型;当$ H编译开关的值为正时(缺省情况),字符串变量是AnsiString 类型。 
      

  4.   

    //最常用的 string
    var
      str: string;   {定义}
    begin
      str := '万一'; {赋值}
      ShowMessage(IntToStr(Length(str))); {长度是: 4}
    end;--------------------------------------------------------------------------------
    //长字符串 AnsiString; 在当前版本(2007)中的默认状态下, String 就是 AnsiString
    var
      str: AnsiString;
    begin
      str := '万一';
      ShowMessage(IntToStr(Length(str))); {长度是: 4}
    end;
      

  5.   

    问题我的实际情况是
    ansistring变成了string
    也就是说ansistring类型不是一个类了,已经
    没有任何方法
    例如ansistring.c_str();
      

  6.   

    只有C++Builder的AnsiString才有c_str()方法,在Delphi当中使用PAnsiChar(Str)代替.
      

  7.   

    AnsiString不是一个类么?
    现在在我的delphi中
    如果a:AnsiString;
    a.xxx
    是出不来任何方法的。这也对?
    也就是说所有方法和属性都出不来了。
    还是说我记忆混淆了,将bcb和delphi混了?另外不是说string可能为ansistring,可能为shortstring
    那么我这里的ansistring=string。最终=shortstring?
      

  8.   

    高版本的默认string=ansistring(2009版本不清楚),最大能达到2g
    s:string[20]这时string是shortstring。
      

  9.   

    楼主的是托管平台下的Delphi?
    System.string不是类么?.NET平台下它就是类啊
      

  10.   

    在C++Builder当中是一个独立的类型实现后的内部数据结构与Delphi当中的一致.但是在Delphi当中只是一个系统定义的结构.
      

  11.   

    看来是其他语言转过来的,已经有思维定势了.
    AnsiString -System.String只是说明在System单元中把AnsiString定义成和String一样
    就等于
    Type
      AnsiString = String;
    而delphi中的string本身就不是一个类.
    在help中说明中看到:它是一个指针,但在前面保存了4个字节的引用计数和4个字节的分配内存的长度.