Question

J'essaie de vérifier a dans le tas avec char * c = s - sizeof (unsigned); Mais cela me renvoie toujours du charabia. Je me demande ce que j'ai fait de mal…

    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;
}
Était-ce utile?

La solution

IMHO, la vérification de 0xdeadbeef doit indiquer

 if (*(unsigned*)c == 0xdeadbeef ){

et le contrôle de capacité

  if (*(int*)(c - sizeof(int))< new_capacity){

Comme vous l'avez, vous lisez des caractères isolés au lieu d'ints, et je pense que vous n'aviez pas l'intention de le faire.

(Je suppose que myStruct devrait être un pointeur sur la chaîne ptr dans struct Mystruct - c'est la seule façon dont cela a du sens pour moi )

Notez également qu'il ne s'agit pas vraiment d'un C portable, car le compilateur est libre d'ajouter du rembourrage pour aligner les membres de la structure. Une approche berret consisterait à utiliser la macro offsetof et à placer le pointeur sur l'ensemble de la structure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top