结构体指针
本帖最后由 6YKT6ZKm5LqI 于 2022-9-14 21:29 编辑9~12行有问题,只要第一句改成time_t t,后两句把t改为&t就是对的,但是没有看懂为什么原来那样写有问题{:5_100:}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
FILE *fp;
struct tm *p;
time_t *t;
time(t);
p = localtime(t);
if ((fp = fopen("date.txt", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
fprintf(fp, "%d-%d-%d", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);
fclose(fp);
if ((fp = fopen("date.txt", "r")) == NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
int year, month, day;
fscanf(fp, "%d-%d-%d", &year, &month, &day);
printf("%d-%d-%d\n", year, month, day);
fclose(fp);
return 0;
}
额,t 获取从1970年到现在的时间,为什么要加个 * ? 这可是标准写法,没有什么讲法可言,背下来,把写法背下来就行了 int* a;
*a = 10;
这个代码有什么问题,您的代码就有什么问题。这是标准写法,但并不是什么高深莫测的东西,只是指针基础。 本帖最后由 6YKT6ZKm5LqI 于 2022-9-15 17:14 编辑
给结构体指针t加了一个内存分配就又对了,搞不懂,明明fp也是结构体指针但是不需要分配内存也不报错{:10_282:}
还是就按小甲鱼的写吧,不用多写一个内存分配
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
FILE *fp;
struct tm *p;
time_t *t;
t = (time_t *)malloc(sizeof(time_t));
if (t == NULL)
{
printf("分配内存失败!");
exitt(1);
}
time(t);
p = localtime(t);
if ((fp = fopen("date.txt", "w")) == NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
fprintf(fp, "%d-%d-%d", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);
fclose(fp);
if ((fp = fopen("date.txt", "r")) == NULL)
{
printf("打开文件失败!\n");
exit(EXIT_FAILURE);
}
int year, month, day;
fscanf(fp, "%d-%d-%d", &year, &month, &day);
printf("%d-%d-%d\n", year, month, day);
fclose(fp);
free(t);
return 0;
}
6YKT6ZKm5LqI 发表于 2022-9-15 16:06
给结构体指针t加了一个内存分配就又对了,搞不懂,明明fp也是结构体指针但是不需要分配内存也不报错{:10_28 ...
您这个理解还是有问题的。
fp 很可能是结构体指针,但是并非没有被分配内存。 fp = fopen("date.txt", "w") 操作在内部为其分配或选择了适当的内存。同样,对 p 的处理也是类似的。 dolly_yos2 发表于 2022-9-15 16:49
您这个理解还是有问题的。
fp 很可能是结构体指针,但是并非没有被分配内存。 fp = fopen("date.txt", " ...
噢噢这样啊,谢谢!{:5_108:}
{:5_108:}
页:
[1]