我正在Delphi中为一个服务器编写一个tcp客户端,该服务器有一系列定义为c结构的消息。以下是其中一条消息的示例转换:
struct {
int32 Reserved;
cstring Name;
int32 flags;
}
msg1 = record
Reserved : integer;
Name : cstring???;
flags : integer;
end
谷歌搜索类型告诉我,cstring与我希望在这种情况下传递的标准char数组不同,但我似乎无法找到cstring的内部表示。
如何在记录中表示传递给服务器的cstring?
答案 0 :(得分:0)
规范显然使用术语cstring来表示一个char数组,后跟一个空终结符而不是实际的CString类型。显然,这只是规范中令人恼火的术语混淆。
答案 1 :(得分:0)
没有真正的区别。 “C字符串”是指向以空字符结尾的字符数组的指针,仅此而已。在C中没有真正的“字符串类型”,就像在Delphi中一样。 Delphi用PChar类型表示它。 (请注意,在D2009及更高版本中,您必须知道PAnsiChar和PWideChar之间的区别。)
但是,如果文档调用数组本身一个C字符串,而不是指向数组的指针,那么这是一个潜在的陷阱。你必须在你的记录中使用一个数组,你必须确切地知道它应该有多长。