У меня есть функция, из которой мне нужно вернуть время для другой функции регистрации, и это выглядит так:
//put time in to buf, format 00:00:00\0
void gettimestr(char buf[9]) {
if(strlen(buf) != 9) { //experimental error checking
fprintf(stderr, "Buf appears to be %d bytes and not 9!\n", strlen( buf ));
}
time_t cur_time;
time(&cur_time);
struct tm *ts = localtime(&cur_time);
sprintf(buf, "%02d:%02d:%02d",
ts->tm_hour,
ts->tm_min,
ts->tm_sec );
strncat(buf, "\0", 1);
}
Теперь я предполагаю, что основная проблема заключается в проверке, достаточно ли длинен буфер, sizeof () возвращает размер указателя, а strlen, кажется, случайным образом возвращает 0 или что-то вроде 12 при двух разных вызовах.
Мой первый вопрос: как я могу безопасно определить размер буфера?
Мой другой вопрос: приемлем ли прием buf [9] или я должен принять указатель на буфер и использовать strcat () вместо sprintf (), чтобы добавить к нему время? sprintf упрощает заполнение нулей значениями времени, хотя, похоже, он принимает только массив символов, а не указатель.