PChar与String的区别及互相转换
2014-01-21 10:51
106 查看
String转换到PChar不是自动的,他们之间的不同点导致他们的转换存在问题。
1. String是引用计数的,而PChar不是
2. 赋值给String是数据的拷贝,而PChar是指向数据的指针。
3. String是空止符结尾(空止符结尾指以#0结尾),并包含有字符串的长度。而PChar是简单的NULL结尾。
把PChar转换为String可用StrPas(PChar),把String转换为PChar可用PChar(String)
1. String(又叫LongString、AnsiString)是Delphi编译器内在支持的(predefined or built-in),是Delphi的一个基本数据类型,而PChar只是一个指向零终止字符串的指针;
2. String所存字符串是在堆(Heap)分配内存的,String 变量实际上是指向零终止字符串的指针,与此同时它还具有引用计数(reference count)功能,并且自身保存字符串长度,当引用计数为零时,自动释放所占用的空间。
3. 将String赋值给另一个String,只是一个简单的指针赋值,不产生copy动作,只是增加String的引用计数;
4. 将一个PChar变量类型赋值给一个String变量类型会产生真正的Copy动作,即将PChar所指向的字符串整个copy到为String分配的内存中;
5. 将String赋值给一个PChar变量类型,只是简单地将String的指针值赋值给PChar变量类型,而String
的引用计数并不因此操作而发生变化,因为这种情况PChar会对String产生依赖,当String 的引用计数为零自动释放内存空间后,PChar很可能指向一个无效的内存地址,在你的程序你必须小心对付这种情况。
6. 对PChar的操作速度要远远高于对String操作的速度,但PChar是一种落后的管理字符串的方式,而String则以高效的管理而胜出,PChar 它的存在只是为了兼容早期的类型和操作系统(调用 Windows API时会经常用到),建议平常使用String。
1. String是引用计数的,而PChar不是
2. 赋值给String是数据的拷贝,而PChar是指向数据的指针。
3. String是空止符结尾(空止符结尾指以#0结尾),并包含有字符串的长度。而PChar是简单的NULL结尾。
把PChar转换为String可用StrPas(PChar),把String转换为PChar可用PChar(String)
1. String(又叫LongString、AnsiString)是Delphi编译器内在支持的(predefined or built-in),是Delphi的一个基本数据类型,而PChar只是一个指向零终止字符串的指针;
2. String所存字符串是在堆(Heap)分配内存的,String 变量实际上是指向零终止字符串的指针,与此同时它还具有引用计数(reference count)功能,并且自身保存字符串长度,当引用计数为零时,自动释放所占用的空间。
3. 将String赋值给另一个String,只是一个简单的指针赋值,不产生copy动作,只是增加String的引用计数;
4. 将一个PChar变量类型赋值给一个String变量类型会产生真正的Copy动作,即将PChar所指向的字符串整个copy到为String分配的内存中;
5. 将String赋值给一个PChar变量类型,只是简单地将String的指针值赋值给PChar变量类型,而String
的引用计数并不因此操作而发生变化,因为这种情况PChar会对String产生依赖,当String 的引用计数为零自动释放内存空间后,PChar很可能指向一个无效的内存地址,在你的程序你必须小心对付这种情况。
6. 对PChar的操作速度要远远高于对String操作的速度,但PChar是一种落后的管理字符串的方式,而String则以高效的管理而胜出,PChar 它的存在只是为了兼容早期的类型和操作系统(调用 Windows API时会经常用到),建议平常使用String。
相关文章推荐
- String Pchar 互相转换
- Pchar 、char、string有什么区别?与转换
- Unicode下wstring(wchar_t*)和string(char*)互相转换
- CString,Char*,string 互相转换
- Enum,Int,String的互相转换
- C# LIST和STRING互相转换
- char*,const char*和string 三者转换及区别
- std::string , Qstring和 const char * 的互相转换
- Swift中String与NSDate的互相转换
- CString 和string的互相转换
- int 和 String 互相转换的多种方法
- int 和 String 互相转换的多种方法-Java基础-Java-编程开发
- C# Enum,Int,String的互相转换 枚举转换
- CString和string的互相转换
- java中的包装类及与String之间的互相转换
- int 和 String 互相转换的多种方法
- Cstring和string的区别和转换
- C# Enum,Int,String的互相转换 枚举转换
- C# Enum,Int,String的互相转换
- string 类型和 pchar 的区别