我写一个如下的字符串结构。
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指针在其他语言中所做的那样?
答案 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