如何从Delphi传递cstring

时间:2010-03-29 15:04:46

标签: delphi string tcpclient cstring

我正在Delphi中为一个服务器编写一个tcp客户端,该服务器有一系列定义为c结构的消息。以下是其中一条消息的示例转换:

struct {
    int32     Reserved;
    cstring   Name;
    int32     flags;
}

msg1 = record
  Reserved : integer;
  Name : cstring???;
  flags : integer;
end

谷歌搜索类型告诉我,cstring与我希望在这种情况下传递的标准char数组不同,但我似乎无法找到cstring的内部表示。

如何在记录中表示传递给服务器的cstring?

2 个答案:

答案 0 :(得分:0)

规范显然使用术语cstring来表示一个char数组,后跟一个空终结符而不是实际的CString类型。显然,这只是规范中令人恼火的术语混淆。

答案 1 :(得分:0)

没有真正的区别。 “C字符串”是指向以空字符结尾的字符数组的指针,仅此而已。在C中没有真正的“字符串类型”,就像在Delphi中一样。 Delphi用PChar类型表示它。 (请注意,在D2009及更高版本中,您必须知道PAnsiChar和PWideChar之间的区别。)

但是,如果文档调用数组本身一个C字符串,而不是指向数组的指针,那么这是一个潜在的陷阱。你必须在你的记录中使用一个数组,你必须确切地知道它应该有多长。