Как я могу определить массив символов для strftime без проб и ошибок? Используя mktime, размер метки N в этом примере должен быть больше 86, иначе я получаю произвольные даты назад. , например.Что такое интеллектуальный способ определения максимального размера массива символов strftime?
N = 86: 2013-07-13 02:41
N = 82: 1979-05-18 13:23
Как эффективно масштабировать N без предварительного знания даты? Проверка> 0 не помогает.
#include <iostream>
#include <cstring>
#include <ctime>
#define N 86
using namespace std;
int main(void)
{
time_t t;
struct tm ts;
char timestamp[N] ;
ts.tm_min = 41;
ts.tm_hour = 2;
ts.tm_mday = 13;
ts.tm_mon = 7 - 1;
ts.tm_year = 13 - 1900 + 2000;
t = mktime(&ts);
if (strftime(timestamp, sizeof(timestamp)-1, "%Y-%m-%d %H:%M", &ts) > 0)
cout << timestamp;
else {
cerr << "strftime failed." <<endl;
return 1;
}
return 0;
}
Это, вероятно, имеет больше общего с неинициализированными членов в 'ts', которые запутывают' mktime'. Попытайтесь «memset (& ts, 0, sizeof (ts));' перед установкой членов, которые вы хотите, так что 'tm_sec' и др. Гарантированно будут' 0'. – Wintermute
... или просто инициализировать его - 'tm ts {};' (Это C++, поэтому нет необходимости в 'struct') –
Не знаете, почему вы думаете, что вам нужна переменная длина для этого. На основе вашей строки формата все даты/время будут иметь одинаковую длину. –