سؤال
وأنا أحاول أن تحقق وفي كومة مع شار * ج = ق - sizeof (غير الموقعة)؛ ولكنه يعود دائما رطانة لي. وأنا أتساءل ماذا فعلت خطأ ...
typedef
struct String {
int length;
int capacity;
unsigned check;
char ptr[0];
} String;
char* modelStrrealloc(char* myStruct, int new_capacity){
char* c = myStruct - sizeof(unsigned);
int length = strlen(s);
String *string;
if (c == 0xdeadbeef ){
printf("1st if statement");
if (*(c - sizeof(int))< new_capacity){
string = malloc(sizeof(String) + new_capacity + 1);
printf("if statement");
assert(string != 0);
(*string).length = length;
(*string).capacity = new_capacity + 1;
strcpy(string->ptr, myStruct);
(*string).check = "~0xdeadbeef";
modelStrfree(myStruct);
return string->ptr;
}
}
return myStruct;
}
المحلول
وIMHO، والاختيار 0xdeadbeef
يجب قراءة
if (*(unsigned*)c == 0xdeadbeef ){
ووالتحقق من وجود قدرة
if (*(int*)(c - sizeof(int))< new_capacity){
والطريقة لديك، وكنت قراءة الأحرف واحدة بدلا من [إينتس]، وأعتقد أنك لم تقصد ذلك.
و(أفترض myStruct
يجب أن يكون مؤشر إلى سلسلة ptr
في struct Mystruct
- وهذا هو السبيل الوحيد فمن المنطقي بالنسبة لي)
لاحظ أيضا أن هذه ليست المحمولة حقا C، لأن المترجم هو حر لإضافة الحشو لمحاذاة أعضاء البنية - ربما نهج berret سيكون لاستخدام الماكرو offsetof
والحصول على المؤشر إلى بنية كاملة ص. >
لا تنتمي إلى StackOverflow