gpt4 book ai didi

c - 如何在 C 中使用结构体来使用函数指针?

转载 作者:行者123 更新时间:2023-11-30 16:19:19 25 4
gpt4 key购买 nike

我正在尝试使用函数指针和结构来打印时间。它不会给出任何错误。它首先起作用,但后来“Test.exe 停止运行!”。

我的文件是:Random.c Random.h、Randomness.c Randomness.h、Test.c

随机.h

struct RANDOM {
char* date;
char* (*Date) (struct RANDOM*);
void (*Write) (struct RANDOM*);
};
typedef struct RANDOM* Random;

Random CreateRandom();
char* DateOfNow(const Random);
void WriteDate(const Random);

随机.c

char* BringTime(){
char* buff = malloc(sizeof(char)*100);
time_t now = time(0);
strftime(buff, 100, "%Y-%m-%d %H:%M",localtime(&now));

return buff;
}

Random CreateRandom(){
Random this;
this = (Random) malloc(sizeof(struct RANDOM));
this->date = BringTime();

return this;
}

char* DateOfNow(const Random this){
return this->date;
}

void WriteDate(const Random this){
printf("\n\n Date is: %s", this->date);
}

随机性.h

struct RANDOMNESS{
Random super;
};

typedef struct RANDOMNESS* Randomness;

Randomness CreateRandomness();

随机性.c

Randomness CreateRandomness(){
Randomness this;
this = (Randomness)malloc(sizeof(struct RANDOMNESS));
this->super = CreateRandom();

return this;
}

测试.c

int main() {

Randomness rnd = CreateRandomness();
printf("works till here");
rnd->super->Write(rnd->super);
}

输出是:工作到这里

输出之后,它停止运行“Test.exe 停止运行”。

我尝试了printf("%p", rnd->super)它给了我地址。所以也许 Write(rnd->super) 函数有问题。

最佳答案

您必须将函数指针分配给结构中的成员字段:

Random CreateRandom(){
Random this;
this = (Random) malloc(sizeof(struct RANDOM));
this->date = BringTime();
// assign function pointer to actual functions
this->Date = &DateOfNow;
this->Write = &WriteDate;

return this;
}

当然,DateOfNowWriteDate 的原型(prototype)应该在 CreateRandom 定义之前可用。

注意:您可以编写this->Date = DateOfNow;(没有&,因为带有函数标识符的&是多余的)。

关于c - 如何在 C 中使用结构体来使用函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55653029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com