Tengo una estructura de la siguiente manera, con un puntero a una función llamada "longitud" que devolverá la longitud del miembro de caracteres.Puntero de función como miembro de una estructura C
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
Tengo una función para devolver el número de caracteres de un puntero a una PString:
int length(PString * self) {
return strlen(self->chars);
}
Tengo un initializeString función() que devuelve un puntero a una PString:
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
Está claro que estoy haciendo algo muy mal con mis punteros aquí, porque la línea str->length = &length
causa una señal EXC_BAD_ACCESS en mi depurador, al igual que `return strlen (self-> char s). ¿Alguien tiene alguna idea sobre este problema?
Específicamente, quiero poder hacer que la función initializeString() devuelva un puntero a una PString, y la función de longitud para usar un puntero a una PString como entrada. Esto es solo un experimento en la implementación de un sistema rudimentario orientado a objetos en C, pero no tengo mucha experiencia lidiando con punteros de frente. Gracias por cualquier ayuda que me puedan dar.
Aunque usted dice que quiere específicamente para devolver un puntero. En este caso, devolver una estructura en sí es mucho mejor. Es una copia barata de estructura, y no hay necesidad de una asignación de montón de gran peso. Los objetos de cadena están basados en valores: no tienen identidad (dirección), pero su igualdad se basa en su contenido. También podría tener este sentido de distinción en su sistema OOP de alguna manera. –