我们在配置文件中使用/ usr / xpg4 / bin作为默认路径。 我们在这里打印变量“curr_date”的输出:
lt = time(NULL);
ltime=localtime(localtime(<));
strftime(curr_date,sizeof(curr_date),"%m/%d/%y%C",ltime);
我们得到的输出为“06/27 / 13Thu Jun 27 02:39:34 PDT”而不是“06/27/1320”。
你知道应该在这里工作的格式说明符是什么吗?
由于
答案 0 :(得分:0)
仔细查看调用strftime()
和打印curr_date
之间的代码。你在某处覆盖curr_data
,因为你打印的内容是正确的。 curr_data
的记忆管理也可能是一些可疑的东西;它是如何定义的,你为curr_data
分配了内存吗?
在strftime()
之后设置一个断点,你会看到它包含预期/正确的字符串。
答案 1 :(得分:0)
在$ PATH中使用/usr/xpg4/bin
仅选择符合标准的命令,它不会更改程序中的函数调用以使用符合标准的版本。
如Solaris standards(5) man page中所述,您需要使用各种#defines和编译器标志来指定各种标准的合规性。
例如,获取代码片段并将其扩展到此独立测试程序:
#include <sys/types.h>
#include <time.h>
#include <stdio.h>
int main(int argc, char **argv)
{
time_t lt;
struct tm *ltime;
char curr_date[80];
lt = time(NULL);
ltime = localtime(<);
strftime(curr_date, sizeof(curr_date), "%m/%d/%y%C", ltime);
printf("%s\n", curr_date);
return 0;
}
然后使用不同的标志进行编译会显示不同的行为:
% cc -o /tmp/strftime /tmp/strftime.c
% /tmp/strftime
06/30/13Sun Jun 30 20:28:00 PDT 2013
% cc -xc99 -D_XOPEN_SOURCE=600 -o /tmp/strftime /tmp/strftime.c
% /tmp/strftime
06/30/1320
默认模式向后兼容传统的Solaris代码,第二种形式要求符合C99和XPG6(Unix03)标准。