تؤدي كتابة DWORD إلى الذاكرة إلى الكتابة فوق بايت واحد فقط بدلاً من 4
سؤال
أملك
typedef unsigned int DWORD;
void write_str(string str, char** buf) {
DWORD len = str.size();
**buf = len;
*buf += sizeof(len);
memcpy(*buf, str.c_str(), len);
*buf += len;
}
يتم الكتابة فوق هذا الرمز، وبايت واحد فقط **buf = len;
إذا كان لدي أي.7 في لين بينما يجب أن يكون 4، لأن sizeof(DWORD) = 4
المحلول
مثل buf
هو char **
, **buf
هو char
.يمكنه استيعاب بايت واحد فقط.لذلك، تتم كتابة بايت واحد فقط إليه.
نصائح أخرى
يصلح:
DWORD *tmpptr(*buf);
*tmpptr = len;
يقوم C++ بإلقاء len تلقائيًا على حرف، لأن هذا هو ما *buf
يكون.
لديك المعلمة
char** buf
وهذا يعني أن **buf
هو شار، وهو على الأرجح بايت واحد.
تتم الكتابة فوق بايت واحد نظرًا لأن نوع الوجهة هو char (نوع **buf
هو شار).هذا صحيح.لكن التعبير *buf += sizeof(len)
ليس لها أي معنى في رأيي.
لا تنتمي إلى StackOverflow