Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中实现时间的错误代码+;_C++_Time - Fatal编程技术网

C++ 在C+中实现时间的错误代码+;

C++ 在C+中实现时间的错误代码+;,c++,time,C++,Time,这是我的一个函数的实现,它可以查找时间、日期等,。。。。等等 我不知道为什么,但我得到了一个错误: 1> c:\users\sebastien\blabla:警告C4244:“参数”:从“time\t”转换为“unsigned int”,可能会丢失数据 1> DateHeure.cpp 1> c:\users\sebastien\blabla->错误C4996:“localtime”:此函数或变量可能不安全。考虑使用LoalTimeTys代替。要禁用弃用,请使用_CRT\u SECURE\u N

这是我的一个函数的实现,它可以查找时间、日期等,。。。。等等

我不知道为什么,但我得到了一个错误:

1> c:\users\sebastien\blabla:警告C4244:“参数”:从“time\t”转换为“unsigned int”,可能会丢失数据

1> DateHeure.cpp

1> c:\users\sebastien\blabla->错误C4996:“localtime”:此函数或变量可能不安全。考虑使用LoalTimeTys代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告。有关详细信息,请参阅联机帮助

1> c:\ProgramFiles(x86)\microsoft visual studio

12.0\vc\include\time.inl(112):参见“localtime”的声明

我曾尝试将localtime更改为localtime\s,但收到一些关于与类型为“tm”的参数兼容的错误消息

我也尝试过(包括或wright)\uuuu CRT\u SECURE\u NO\u警告,但没有成功->我不知道,但仅仅包括这一行似乎很奇怪(在属性>c++>预处理器>未定义的预处理器定义中),而没有添加任何其他内容

承认我对VisualStudio不太熟悉,所以我不确定所有这些属性的设置和调整

但如果有人能帮我解决这个问题,我会非常感激,我想这是我唯一的错误,我会在以后调试


请包括一些关于为什么。。。我想理解。

C4996不应该是一个错误,我想您已经调整了编译选项使其成为一个错误。(或

无论如何,不使用静态本地缓冲区的替代函数更好,而且它们也是可移植的(除了名称,在Win32上是
localtime\u s
,在Linux上是
localtime\r
,宏可以修复),所以没有理由不使用它们

没有静态本地缓冲区的版本要求您提供一个缓冲区,这很容易:

time_t rawtime;
struct tm * timeinfo;

time(&rawtime);
timeinfo = localtime(&rawtime);

heure_= timeinfo->tm_hour;
minute_ = timeinfo->tm_min;
seconde_ = timeinfo->tm_sec;
jourMois_ = timeinfo->tm_mday;
jourSemaine_ = timeinfo->tm_wday;
mois_ = timeinfo->tm_mon;
annee_ = timeinfo->tm_year;

C4996不应该是一个错误,我想您调整了编译选项使其成为一个错误。(或

无论如何,不使用静态本地缓冲区的替代函数更好,而且它们也是可移植的(除了名称,在Win32上是
localtime\u s
,在Linux上是
localtime\r
,宏可以修复),所以没有理由不使用它们

没有静态本地缓冲区的版本要求您提供一个缓冲区,这很容易:

time_t rawtime;
struct tm * timeinfo;

time(&rawtime);
timeinfo = localtime(&rawtime);

heure_= timeinfo->tm_hour;
minute_ = timeinfo->tm_min;
seconde_ = timeinfo->tm_sec;
jourMois_ = timeinfo->tm_mday;
jourSemaine_ = timeinfo->tm_wday;
mois_ = timeinfo->tm_mon;
annee_ = timeinfo->tm_year;

localtime
函数可能不安全,因为它返回的指针指向用于自身和其他调用的结构。这意味着,如果调用一个函数来更改该内部结构,那么指向它的所有指针都将反映新数据

如果您知道,如果您可以确保数据在使用完毕之前不会被修改,那么您仍然可以安全地使用它。在这种情况下,您可以这样做:

time_t rawtime;
struct tm timeinfo;  // no longer a pointer

time(&rawtime);

// on platforms with POSIX localtime_r but no localtime_s, add this macro
// #define localtime_s(x, y) localtime_r(y, x)
localtime_s(&timeinfo, &rawtime); // fills in your structure,
                                  // instead of returning a pointer to a static one

heure_= timeinfo.tm_hour;  // no longer using a pointer
minute_ = timeinfo.tm_min;
seconde_ = timeinfo.tm_sec;
jourMois_ = timeinfo.tm_mday;
jourSemaine_ = timeinfo.tm_wday;
mois_ = timeinfo.tm_mon;
annee_ = timeinfo.tm_year;
#define _CRT_SECURE_NO_WARNINGS 1
#include <ctime>
#include <iostream>

int main()
{
    time_t rawtime = time(nullptr);
    tm* timeinfo = localtime(&rawtime);

    std::cout << asctime(timeinfo) << "\n";
    return 0;
}

请记住,
localtime\u s
可能无法在所有平台上使用,因此它的可移植性较差。

localtime函数可能不安全,因为它返回的指针指向用于自身和其他调用的结构。这意味着,如果调用一个函数来更改该内部结构,那么指向它的所有指针都将反映新数据

如果您知道,如果您可以确保数据在使用完毕之前不会被修改,那么您仍然可以安全地使用它。在这种情况下,您可以这样做:

time_t rawtime;
struct tm timeinfo;  // no longer a pointer

time(&rawtime);

// on platforms with POSIX localtime_r but no localtime_s, add this macro
// #define localtime_s(x, y) localtime_r(y, x)
localtime_s(&timeinfo, &rawtime); // fills in your structure,
                                  // instead of returning a pointer to a static one

heure_= timeinfo.tm_hour;  // no longer using a pointer
minute_ = timeinfo.tm_min;
seconde_ = timeinfo.tm_sec;
jourMois_ = timeinfo.tm_mday;
jourSemaine_ = timeinfo.tm_wday;
mois_ = timeinfo.tm_mon;
annee_ = timeinfo.tm_year;
#define _CRT_SECURE_NO_WARNINGS 1
#include <ctime>
#include <iostream>

int main()
{
    time_t rawtime = time(nullptr);
    tm* timeinfo = localtime(&rawtime);

    std::cout << asctime(timeinfo) << "\n";
    return 0;
}

<>记住 LoalTimeTys<代码>可能不适用于所有平台,因此它可能不那么便携。加上语言标签。@Yu Hao,你能告诉我为什么你把所有的i都改成大写,尽管它们不都是一个句子的开头吗?(英语不是我的母语,为我的错误感到抱歉)但它是否像这里的人们一样?(RESon)用英文写大写字母。密切相关:是C还是C++?加上语言标签。@Yu Hao,你能告诉我为什么你把所有的i都改成大写,尽管它们不都是一个句子的开头吗?(英语不是我的母语,为我的错误感到抱歉)但它是否像这里的人们一样?(原因是什么)总是用英文大写字母书写。密切相关:其他重要的平台有
localtime\r
。。。因为静态本地缓冲区确实是个坏主意。除了名称之外,唯一的区别是
localtime\r
切换两个参数。。。一个宏可以很容易地解决这个问题。这是真的,尽管如果它们支持C11,它们也可能有
localtime\s
。嗯,两者都有。它名为
localtime\u s
,但它返回的指针类似于posix版本,而不是Microsoft版本的错误代码。有点乱。ISO/IEC 9899:2011附录K.3.8.2.4中定义了
struct tm*localtime\s()
的C11标准变体
localtime\s(),
struct tm*restrict result),与MSDN定义的
errno\u t localtime(struct tm*\u tm,const time*time)相比。另请参见,我以前不知道这组差异。@BenVoigt:C标准
localtime\u s()
名称与POSIX
localtime\r()具有相同的签名。微软对
*.\u()
函数的实现是一成不变的(通过发布),并提交给了C标准委员会,该委员会做出了合理的修改,但由于MS已经发布了它们的变体,因此造成了损害。这是一个令人难以置信的混乱,而且确实非常不幸。其他重要的平台有
localtime\r
。。。因为静态本地缓冲区确实是个坏主意。除了名称之外,唯一的区别是
localtime\r
切换两个参数。。。一个宏可以很容易地解决这个问题。这是真的,尽管如果它们支持C11,它们也可能有
localtime\s
。嗯,两者都有。它的名字是