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)
은 그 크기가 char
이고, sizeof(NX)
은 실제로 포인터의 크기입니다. sizeof(ss)
은 두 문자열 멤버 (및 컴파일러에서 추가 한 모든 패딩)의 크기입니다. sizeof(&ss)
은 stringstruct에 대한 포인터 크기입니다.
이제 네트워크를 통해 두 개의 별도 문자열로 데이터 ("123"
및 "abc"
)를 보내는 것이 좋습니다. 위의 어느 것도 도움이되지 않습니다. 왜냐하면 sizeof(ss)
이 전송하려는 데이터 구조의 크기를 제공하더라도 문자열 값은 해당 구조 [1] 내에 있지 않기 때문입니다. 정말 필요한 것은 serialization을 호출하는 것입니다. 문자열을 텍스트/문자열과 별도의 요소로 작성하는 것입니다. 이 같은
뭔가 작동합니다 :
이
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
실제로 실제 클래스 자체 내에서 짧은 문자열을 저장하는 최적화 있습니다. 그러나 충분히 강하게 주어진다면, 그렇게하지 않을 것입니다.
포인터는 일반적으로 포인 티와 크기가 다르기 때문에? –
힌트 : 네트워크 (또는 다른 것)를 통해'std :: string '을 보내려고하면 예상대로 작동하지 않습니다. 객체의 실제 문자열은 보내지 않으며 객체 (실제 문자열의 _pointer_를 포함) 만 전달합니다. –