gpt4 book ai didi

c - C 中日期的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:35 25 4
gpt4 key购买 nike

这是我的:

struct test_date {
time_t t;
pid_t pid;
};

int main(int argc, char *argv[]) {
dates = malloc(CHILDREN_LIMIT * sizeof(struct test_date*)); // an array declared static of type struct test_date
//... later
struct test_date *td = &dates[children]; //children is a counter
if (fork() == 0) { // in a child process
td->pid = getpid();
time(&(td->t));
//now, if I print the date, I get a strange result. look bellow for get_time function.
printf("%s\n", get_time(&td->t));
//...
}
//...
exit(0);
}

char *get_time(time_t *t) {

struct tm *bt = malloc(sizeof(struct tm*));
char *strt = malloc(DATE_SIZE * sizeof(char *));

localtime_r(t, bt);
strftime(strt, 100, "%Y-%m-%d %T", bt);
return strt;
}

此代码的输出:

例如。应该是:2013-07-16 09:21:28

但它是:2013-858861619-16 09:21:28

甚至,如果我稍后调用相同的 printf 函数,在从子进程调用的某些函数中,我会得到更糟糕的结果。某个日期到 1974 年。

谁能告诉我我的错误在哪里?我想它应该是我将 time_t 变量作为指针传递的地方,但我不明白为什么会出现这种行为。任何人都可以详细说明这个主题吗?

最佳答案

struct tm *bt = malloc(sizeof(struct tm*));
char *strt = malloc(DATE_SIZE * sizeof(char *));

应该是:

struct tm *bt = malloc(sizeof(struct tm));
char *strt = malloc(DATE_SIZE * sizeof(char));

main 中:

dates = malloc(CHILDREN_LIMIT * sizeof(struct test_date*)); 

应该是

dates = malloc(CHILDREN_LIMIT * sizeof(struct test_date)); 

我想你可能对malloc的用法有误解,查阅手册,使用这种更安全的形式,参见here详情:

struct tm* bt = malloc(sizeof(*bt));

关于c - C 中日期的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669831/

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