Как неявно передать * этот указатель на указатель на функцию в структуре - PullRequest
0 голосов
/ 16 марта 2019

Я пишу строковую структуру следующим образом.

typedef struct string string;
struct string
{
    int length;
    char* content;
    void (*init)(string*, const char*);
    void (*print)(string*);
};
void print(string* a)
{
    printf("%s", a->content);
}
void init(string* a, const char* b)
{
    a->init = init;
    a->print = print;
    a->length = strlen(b);
    a->content = (char*)malloc(sizeof(char) * strlen(b));
    strcpy(a->content, b);

}

int main()
{
    string a;
    init(&a, "Hello world!\n");
    a.print(&a);
}

Я пытался подражать ooc здесь, но я не могу найти лучший способ.Например, есть ли возможный способ сделать print (& a) похожим на: a.print, не передавая указатель на себя на функцию, как неявный * этот указатель делает на другом языке?

1 Ответ

0 голосов
/ 16 марта 2019

есть ли способ сделать print (& a) похожим на: a.print, не передавая указатель на себя на функцию, как неявный * этот указатель делает на другом языке?

вы не можете


предупреждение в

a->content = (char*)malloc(sizeof(char) * strlen(b));
strcpy(a->content, b);

вам нужно выделить еще 1 для нулевого конечного символа, иначе strcpy записывает из выделенного блока неопределенное поведение

a->content = malloc(a->length + 1);

strlen уже сохранен в a->length, поэтому я использую его, и умножать на sizeof(char) бесполезно, потому что это 1 по определению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...