سؤال

وأنا أحاول أن تحقق وفي كومة مع شار * ج = ق - 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 والحصول على المؤشر إلى بنية كاملة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top