如何将* this指针隐式传递给struct中的函数指针

时间:2019-03-16 07:38:26

标签: c function-pointers

我写一个如下的字符串结构。

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,而无需将指向其自身的指针传递给函数,就像隐式* this指针在其他语言中所做的那样?

1 个答案:

答案 0 :(得分:0)

  

是否有一种方法可以使print(&a)像:a.print,而无需将指向其自身的指针传递给函数,就像隐式* this指针在其他语言中所做的那样?

你不能


警告

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