【发布时间】:2021-02-24 04:29:30
【问题描述】:
所以我试图在 epochtime 之外形成一个字符串以将其用作文件名,我之前一直在为 printintg epochtime 苦苦挣扎,我得到了正确转换和格式说明符的答案:就是这样:
printf("%ju\n", (uintmax_t)epochdate);
现在这是一个简单的代码示例,到目前为止还不起作用:
#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <string.h>
#define EXTENSION ".txt"
int main(void)
{
struct tm t;
time_t t_of_day;
char* filename = NULL;
FILE *fp=NULL;
t.tm_year = 2019-1900; // Year - 1900
t.tm_mon = 7; // Month, where 0 = jan
t.tm_mday = 8; // Day of the month
t.tm_hour = 16;
t.tm_min = 11;
t.tm_sec = 42;
t.tm_isdst = -1; //dst unknown
t_of_day = mktime(&t);
long test = (long)t_of_day;
sprintf("filename", "%ld"EXTENSON,test);
printf("%s", filename);
fp = fopen(filename, "w");
if(fp == NULL)
{
printf("error");
}
}
同样的想法是获取纪元时间并将其与扩展名(此处为“.txt”)一起使用以形成要在文件名中使用的字符串。 我尝试过转换为 long double 并使用 "%ld" 。我尝试转换为 uintmax_t 并使用“%ju”都不起作用!!有什么想法吗?
【问题讨论】:
-
哦,
extension是一个宏,这真是鬼鬼祟祟。当您确实有sprintf时,这真的不是这样做的方法。使用"%ld.txt"说明您在做什么。 -
您也不能将
sprintf转换为像"filename"这样的常量字符。您需要写入缓冲区。你的意思是sprintf(filename, "%ld.txt", test)?如果是,filename就是NULL,所以需要先分配内存。建议:char filename[PATH_MAX]. -
@thart 行是我要问的。这是错误的,我的问题是如何纠正它。语法没有错。但更多的是格式说明符。
-
@Barmar 刚刚看到了。