Delphi 指向字符串转换的指针?

Delphi 指向字符串转换的指针?,delphi,Delphi,我使用GetMem(1028字节长度)分配内存,因此我有一个已分配的指针 然后我正在阅读内容,我知道有1028个字节被读取。 如何转换指针或将其转换为字符串 我是否应该在转换之前终止内存的内容 谢谢 使用。传递一个字符串变量、指针和字符串长度(1028)。Delphi字符串隐式以null结尾,因此函数将自动添加该字符串(即使缓冲区中已经有null字节) 更好的是,设置字符串的长度,并直接将数据读入其中,而不是使用中间缓冲区。如果您必须使用中间缓冲区,那么您也可以使用静态大小为1028字节的缓冲区

我使用GetMem(1028字节长度)分配内存,因此我有一个已分配的指针

然后我正在阅读内容,我知道有1028个字节被读取。 如何转换指针或将其转换为字符串

我是否应该在转换之前终止内存的内容

谢谢

使用。传递一个字符串变量、指针和字符串长度(1028)。Delphi字符串隐式以null结尾,因此函数将自动添加该字符串(即使缓冲区中已经有null字节)


更好的是,设置字符串的长度,并直接将数据读入其中,而不是使用中间缓冲区。如果您必须使用中间缓冲区,那么您也可以使用静态大小为1028字节的缓冲区,而不是使程序的动态内存管理复杂化。

什么版本的Delphi(unicode或ansi
string
)?从数据的来源,您是否事先知道它是字符串,或者可能还有其他类型的数据?Delphi-7。数据来自tcp端口。这是一根绳子。然而,即使有一些二进制字节,字符串保存它们也不成问题。对于二进制数据,您无法确定其中是否有a
0
值。为什么不使用像
var buffer:string这样的代码;开始设置长度(缓冲区,1028)缓冲区[20]
访问各个字节。对于较新版本的Delphi,您当然需要使用
ansistring
。如何正确地将其转换为字符串?在这种情况下,您可能可以将数据直接读取到字符串变量中,而无需经过中间缓冲区,即
var buf:AnsiString;设定长度(buf,1028);read(buf[1])。关键是使用
buf[1]
作为缓冲区的地址。SetString将内容复制到堆上的新位置,对吗?是的。如果你想知道的话,它当然不会拥有缓冲区。它无法知道如何分配任意缓冲区,因此无法将其合并到必需的内部字符串数据结构中。因此需要单独的副本。请注意,对现有字符串调用
SetLength()
将重新分配该字符串,即将其旧内容移动到新位置,即使您不使用此旧内容。因此,在实践中,您最好使用
SetString()
,甚至使用
nil
作为内存缓冲区,或者在调用
SetLength()
之前将上一个字符串分配给“”。