Compara la estructura con una constante en C

Estoy tratando de hacer una clase de cadena personalizada. Atrapado en un problema donde necesito comparar por estructura a una cadena constante

Ejemplo

typedef struct{ char *val; } STRING; int func (STRING* compare){ if ( compare == "a string" ){ return 1; return 0; } 

Necesitas usar strcmp. Para seguir con la devolución de 1 si es igual:

 int func (STRING* compare){ if ( strcmp(compare, "a string" ) == 0) return 1; return 0; } 

Cuando se trata de struct en C, ya que no tiene características orientadas a objetos, es bueno encapsular el comportamiento o las operaciones en dichos struct dentro de los métodos.

Dado que su tipo de STRING contiene un puntero que creo que debería ser propiedad de la instancia, entonces podría proporcionar 3 métodos para administrar la asignación, la desclasificación y la comparación de objetos de STRING , por ejemplo:

 #include  #include  #include  #include  typedef struct { char* val; } STRING; STRING string_alloc(const char* val) { STRING string; string.val = malloc(strlen(val)+1); strcpy(string.val, val); return string; } void string_free(STRING* string) { free(string->val); } bool string_compare(const STRING* str1, const STRING* str2) { return strcmp(str1->val, str2->val) == 0; } int main(void) { STRING string = string_alloc("foo"); STRING string2 = string_alloc("foo"); printf("Are equal: %s\n", string_compare(&string, &string2) ? "true" : "false"); string_free(&string); string_free(&string2); return 0; } 

De esta manera, puede encapsular el comportamiento de comparación dentro de un método y modificarlo si necesita alterar la estructura de la struct (por ejemplo, agregar campos, eliminar campos) sin tocar nada más del código.

 typedef struct{ char *val; } STRING; int cmp(const STRING *a) { return strcmp(a->val, "a string"); } 

Necesitas strcmp para la comparación de cadenas. == compara direcciones.