gpt4 book ai didi

C++,strftime 到字符串

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:05 24 4
gpt4 key购买 nike

我制作了这样的函数以字符串形式获取所需的时间信息。

string gettimeinfo()
{
tm * timeinfo;
time_t rawtime;
char timebuff[120] = {0};
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(timebuff, 120, "%d.%m.%Y. %H:%M:%S %x %W %I:%M %p %a %b %A %B %Z\n", timeinfo);
return string(timebuff);
}

此编译没有错误并按预期工作。
但是当在 code:blocks/GCC 程序上调试时,程序在 return 语句处停止并出现调试警告:

In std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) () ()

会发生什么以及如何摆脱它?

编辑:整个错误是:

In std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned int, std::allocator<char> const&) () ()
#1 0x004013fe in gettimeinfo () at C:\programi\[connectcpp\general.cpp:36
C:\programi\[connectcpp\general.cpp:36:785:beg:0x4013fe
At C:\programi\[connectcpp\general.cpp:36
In char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) () ()
In std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) () ()
In operator new(unsigned int) () ()

最佳答案

首先,您应该至少检查strftime 的返回值。如果它返回零,则您的缓冲区无效,您不应尝试从中构造字符串。

其次,new 中的错误通常意味着您的堆在此操作之前已损坏。如果你坚持一个

std::string tmp("heap test");

例如,在你的 return 声明之前,并且以同样的方式失败,你肯定有一些先前的损害(不幸的是,反过来是不正确的,因为这些事情通常不是确定性的)。使用 valgrind 或其他一些堆检查器是更好的选择。

关于C++,strftime 到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com