C语言编程函数localtime_s在VS 2020中写的程序参数错误,参数怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程函数localtime_s在VS 2020中写的程序参数错误,参数怎么写?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<time.h>

int main()

int command[4] = 0,1,2,3 ; //定义一个数组
int num;
struct tm *sysTime;
printf("如需帮助可输入数组0!\n");
printf("请输入命令符:\n");
while (1)

scanf_s("%d", &num); //获得输入数字
//判断用户输入的字符
if (command[0] == num) //如果输入数字0

//输出帮助信息
printf("输入数字1 显示系统日期,输入数字2显示系统时间,输入数字3退出系统!\n");

else if (command[1] == num)

time_t nowTime;
time(&nowTime);
sysTime = localtime_s(&nowTime);
printf("系统日期:%d-%d-%d \n", 1900 + sysTime->tm_year, sysTime->tm_mon + 1, sysTime->tm_mday);

else if (command[2] == num)

time_t nowTime;
time(&nowTime);
sysTime = localtime_s(&nowTime);
printf("系统时间:%d:%d:%d \n", sysTime->tm_hour, sysTime->tm_min ,sysTime->tm_sec);

else if (command[3] == num)

return 0;

printf("请输入命令符:\n");


return 0;

这个新的函数localtime_s和localtime不一样,它需要两个参数,你只传了一个。你可以参考图中代码

追问

那参数再调用哪个

追答

图片里的例子有啊

sysTime=localtime_s(&nowTime);这句改成localtime_s(&sysTime, &nowTime);

追问

程序调试,在printf后面,引发了异常,sysTime是nullptr

读取访问权限冲突

追答

你把sysTime定义成变量,不要定义成指针

后面你的代码相应还一下,_>改成.

参考技术A Visual C++ 6.0开发环境中显示当地日期与时间主要通过localtime()函数来实现,该函数的原型在time.h头文件中,其语法格式如下:
struct tm *localtime(xonst time_t *timer)

该函数的作用是把timer所指的时间(如函数time返回的时间)转换为当地标准时间,并以tm结构形式返回。其中,参数timer为主要获取当前时间的传递参数,格式为time_t指针类型。
而在Visual Studio 2010极其以后的版本,新增了安全函数,改成localtime_s(),语法格式也发生了变化:

errno_t localtime_s(

struct tm* _tm,
const time_t *time
);
其中:
_tm

指向要填充的时间结构的指针。
time
指针,指向存储的时间。
如果成功,返回值则为零。 如果失败,返回值将是错误代码。 错误代码是在 Errno.h 中定义的。
结构类型的字段 tm 存储下面的值,其中每个为 int。

tm_sec

分钟后的几秒 (0-59)。
tm_min
小时后的分钟 (0-59)。
tm_hour
午夜后经过的小时 (0-23)。
tm_mday
月 (1-31) 天。
tm_mon
月 (0 – 11;年 1 月 = 0)。
tm_year
年份 (当前年份减去 1900年)。
tm_wday
星期几 (0 – 6;星期日 = 0)。
tm_yday
每年的一天 (0-365;1 月 1 日 = 0)。
tm_isdst
如果夏令时有效,则为,正值夏时制不起作用; 如果为 0如果夏时制的状态是未知的负值。 如果 TZ 设置环境变量,C 运行库会假定规则适用于美国境内用于实现夏令时 (DST) 计算。
下面以一个实例来输出当地日期与时间:
#include <stdio.h>

#include <string.h>
#include <time.h>
int main(void)


struct tm t; //tm结构指针
time_t now; //声明time_t类型变量
time(&now); //获取系统日期和时间
localtime_s(&t, &now); //获取当地日期和时间
//格式化输出本地时间

printf("年:%d\n", t.tm_year + 1900);
printf("月:%d\n", t.tm_mon + 1);
printf("日:%d\n", t.tm_mday);
printf("周:%d\n", t.tm_wday);
printf("一年中:%d\n", t.tm_yday);
printf("时:%d\n", t.tm_hour);
printf("分:%d\n", t.tm_min);
printf("秒:%d\n", t.tm_sec);
printf("夏令时:%d\n", t.tm_isdst);
system("pause");
//getchar();
return 0;

VS2019 C++动态链接库的创建使用 - C语言客户端

前面提到过C++具有函数重载功能,所以引出的函数名会有变化,即名称改编,如果是C语言编写的客户端则无法正确识别。

处理方法:

①只需在宏定义中间增加 extern "C",但这种使用仅针对导出的函数是全局的,如果导出的是类,则不能这样。

技术图片

②通过dumpbin查看导出的函数信息,可以看到函数名称跟我们声明的相同;

技术图片

 

以上是关于C语言编程函数localtime_s在VS 2020中写的程序参数错误,参数怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

C语言关于localtime_s()和asctime_s()两个函数的用法。

localtime vs localtime_s 和适当的输入参数

Windows 上 localtime_s() 多线程性能不佳的解决方法

使用vs2013编写c语言程序 为啥 会出现max函数没有被定义error

C语言用VS2010报错

最近在自学C语言,用的VS2019,为啥照抄结果还报错?请指教。。。。