stringstruct ss = {"123","abc"};
char *NX = (char*)&ss;
cout << sizeof(NX) << endl << sizeof(*NX) << endl;
cout << sizeof(&ss) << endl << sizeof(ss) << endl;
我很确定这些演员阵容中的任何一个都毫无意义。NX
将指向您的结构的开头。结构内部有两个类型为 的对象string
,它们又分别有指向它们初始化数据的指针"123"
和"abc"
。sizeof(*NX)
只是 a的大小char
,并且sizeof(NX)
确实是指针的大小。sizeof(ss)
是您的两个字符串成员的大小(以及编译器添加的任何填充) - 并且sizeof(&ss)
是指向 stringstruct 的指针的大小。
现在,我希望您真正想要的是一种发送数据的方式,"123"
并且"abc"
作为两个单独的字符串通过网络发送。以上都不会帮助您做到这一点,因为即使sizeof(ss)
给您想要发送的数据结构的大小,字符串值也不在该结构内 [1]。您真正需要的是称为序列化的东西 - 将您的字符串作为文本/字符串的单独元素写出的东西。
像这样的东西会起作用:
struct stringstruct {
string s1;
string s2;
string to_string()
}
string stringstruct::to_string()
{
string res = s1 + " " + s2;
return res;
}
然后to_string
像这样使用:
string temp = ss.to_string();
const char *to_send = temp.c_str();
int send_len = temp.length();
... send the string `to_send` with number of bytes `send_len`.
[1] 有一个优化,std::string
实际上是在实际类本身中存储短字符串。但鉴于足够长的强度,它不会那样做。