c - 如何将 *this 指针隐式传递给 struct 中的函数指针
问题描述
我写了一个字符串结构如下。
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 指针一样?
解决方案
有没有一种可能的方法使 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
推荐阅读
- angular - 在 app.module.ts 中导入类的简单方法
- verilog - System Verilog DPI Checker 屏蔽 128 位值
- python - 以菱形填充的numpy数组
- javascript - 在向 DataTable 添加 100,000 行时,Google Chrome 中的渲染过程消失了
- java - 如何杀死运行任意客户端代码的线程
- amazon-web-services - 如何使用 ELB 的 AWS 默认 DNS 请求 ACM
- java - 在 facebook 上查找用户名时出现空指针异常
- c - 有没有办法使变量在当前范围之外的 1 个范围内存活?
- csv - neo4j-admin 导入可以跳过存在导入错误的 CSV 行吗?
- java - Maven exec:java 覆盖 pom.xml 中定义的系统属性