Pergunta

Eu estou tentando verificar um na pilha com char * c = s - sizeof (unsigned); Mas ele sempre retorna jargão para mim. Eu estou querendo saber o que foi que eu fiz de errado ...

    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;
}
Foi útil?

Solução

IMHO, o cheque para 0xdeadbeef deve ler

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

e a verificação de capacidade

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

A forma como você tem isso, você está lendo caracteres simples em vez de ints, e eu acho que você não pretendia isso.

(presumo myStruct deve ser um ponteiro para a cadeia ptr em struct Mystruct - esta é a única maneira que faz sentido para mim)

Além disso, nota que este não é realmente portátil C, porque o compilador é livre para adicionar preenchimento para os membros de struct align -. Talvez uma abordagem berret seria usar a macro offsetof e obter o ponteiro para toda a struct

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top