Я в основном работаю с C и не использовал классы в течение довольно длительного времени. Я пытаюсь использовать некоторые функции класса, созданные кем-то другим, но я не могу заставить функцию deserialize() работать. Я понимаю, что он делает, но я не могу для жизни понять, как назвать эту функцию. Я предоставил функции и как я пытаюсь их назвать.Вызов функций класса, использующих массивы символов (C++)
//Creates a packet
packet::packet(int t, int s, int l, char * d){
type = t;
seqnum = s;
length = l;
data = d;
}
// This function serializes the data such that type, seqnum, length, and data values are placed
// in a char array, spacket, and separated by a single space; that is, spacket contains the serialized data
void packet::serialize(char * spacket){
cout << "data: " << endl << endl;
sprintf (spacket, "%d %d %d %s", type, seqnum, length, data);
}
// This function deserializes a char array, spacket, which is the result of a call to serialize
void packet::deserialize(char * spacket){
char * itr;
itr = strtok(spacket," ");
char * null_end;
this->type = strtol(itr, &null_end, 10);
itr = strtok(NULL, " ");
this->seqnum = strtol (itr, &null_end, 10);
itr = strtok(NULL, " ");
this->length = strtol (itr, &null_end, 10);
if(this->length == 0){
data = NULL;
}
else{
itr = strtok(NULL, "");
for(int i=0; i < this->length; i++){ // copy data into char array
this->data[i] = itr[i];
}
}
}
А вот как я пытаюсь получить эту работу:
packet *test = new packet(1, 4, 4, message); //message is a *char with the data
test->serialize(sendbuf); //this works correctly
packet *test2 = new packet(0,0,0, NULL); //I am not sure if I need to be creating a new packet for the deserialized information to get placed into
test->deserialize(sendbuf); //results in a segmentation fault currently
Я просто не понимаю, как назвать десериализации(), я создал пакет и сериализовать его и часть отлично работает, но я не понимаю, как ее отменить. Нужно ли сначала создавать пустой пакетный объект? Если да, то как? Я попытался сделать это несколькими способами, но я не могу заставить его работать. Я знаю, что это очень просто, но, как я уже сказал, я не работал с классами через пару лет. Мне потребовалось довольно много времени, чтобы сериализовать работу, но я попробовал все, что мог придумать для десериализации и застрял.
Это сработало! Спасибо. Теперь я понимаю, что создаю пакет, но не предоставляю ему буфер для работы. – Pongjazzle