Sehr langer String
-
Datei öffnen:
/** Unsere eigentlichen Daten */ struct PacketTransmission { char *data; // Daten an sich size_t nlength; // Dateigroeße }; FILE *fp = fopen(pb.filename.c_str(), "rb"); // Dateigroese herausbekommen fseek(fp, 0, SEEK_END); int length = ftell(fp); rewind(fp); if(pb.pData == NULL) pb.pData = new PacketTransmission; pb.pData->nlength = length; pb.pData->data = new char[length]; fread(pb.pData->data, length, 1, fp); fclose(fp);Setzen eines Strings
void Packet::SetString(std::string strData) { if(pb.pData == NULL) { pb.pData = new PacketTransmission; pb.pData->data = NULL; } if(pb.pData->data == NULL) { pb.pData->data = new char[strData.length()]; pb.pData->nlength = strData.length(); strcpy(pb.pData->data, strData.c_str()); } else { delete pb.pData->data; pb.pData->data = new char[strData.length()]; pb.pData->nlength = strData.length(); strcpy(pb.pData->data, strData.c_str()); } }Kann es sein, dass es daran liegt, dass ich nur ein send hab, welches mehrere MB rüberschickt und dadurch Unmengen an Fehler entstehen können?
-
strcpy(pb.pData->data, strData.c_str());
hier hast du wieder das Problem mit den 0 Bytes.
du brauchst hier memcpyDas Problem ist, du hast keinen echten C String. Ein C String ist nämlich dadurch definiert, dass er mit einem 0 Byte beendet wird. Wenn du binärdaten überträgst ist das aber nicht gegeben und du musst immer die größe mitangeben.
Warum mischst du C und C++ eigentlich so?
PS:
delete pb.pData->data;
das muss
delete [] pb.pData->data;
lauten.
-
Shade Of Mine schrieb:
strcpy(pb.pData->data, strData.c_str());
hier hast du wieder das Problem mit den 0 Bytes.
du brauchst hier memcpyDas Problem ist, du hast keinen echten C String. Ein C String ist nämlich dadurch definiert, dass er mit einem 0 Byte beendet wird. Wenn du binärdaten überträgst ist das aber nicht gegeben und du musst immer die größe mitangeben.
Warum mischst du C und C++ eigentlich so?
PS:
delete pb.pData->data;
das muss
delete [] pb.pData->data;
lauten.Ah nochmal ein sehr sehr großes Danke! Endlich funktioniert es!
Das Vermischen ist eig. im Nachhinein enstanden, da ich anfangs nur C++ genutzt habe und testen wollte, ob es evtl. am fstream / string lag.MD5 stimmt jetzt auch komplett überein.
Nochmal ein großer Dank an alle!