这就是我想要的:
char *getHour(){
return ("%d:%d:%d",hour, min, sec);
}
返回一个像这样的字符串“hh:mm:ss” 我怎么能这样做?
答案 0 :(得分:1)
一种可能的实施方式如下所示
编辑:将Dave的建议纳入static
数组,snprintf
并返回const char *
int hh = 5, mm = 45, ss = 20;
const char* getHour()
{
static char hourStr[32];
snprintf(hourStr,14, "%d:%d:%d\n", hh, mm, ss);
return hourStr;
}
如果您将此实现的输出打印为printf("GetHour: %s\n", getHour());
,您将得到GetHour: 5:45:20
,我认为这是您的预期输出。
答案 1 :(得分:1)
我会假装你有充分的理由这样做。这是您正在寻找的代码:
char *getHourMinuteSecond( int hour, int minute, int second ) {
assert( hour >= 0 && hour < 24 );
assert( minute >= 0 && minute < 60 );
assert( second >= 0 && second <= 60 ); // leap seconds... maybe
char *output = (char *) malloc( 9 * sizeof( char ) );
if( output == NULL ) {
return NULL;
}
output[0] = (char) ((hour / 10) + '0');
output[1] = (char) ((hour % 10) + '0');
output[2] = ':';
output[3] = (char) ((minute / 10) + '0');
output[4] = (char) ((minute % 10) + '0');
output[5] = ':';
output[6] = (char) ((second / 10) + '0');
output[7] = (char) ((second % 10) + '0');
output[8] = '\0';
return output;
}
现在让我们放松一下对某些东西的限制。我们可以使用snprintf:
char *getHourMinuteSecond( int hour, int minute, int second ) {
assert( hour >= 0 && hour < 24 );
assert( minute >= 0 && minute < 60 );
assert( second >= 0 && second <= 60 ); // leap seconds... maybe
char *output = (char *) malloc( 9 * sizeof( char ) );
if( output == NULL ) {
return NULL;
}
snprintf( output, 9, "%02d:%02d:%02d", hour, minute, second );
return output;
}
让我们保持稳定,让函数通过参数返回(这样我们就不需要使用malloc
)了:
void getHourMinuteSecond( char target[9], int hour, int minute, int second ) {
assert( target != NULL );
assert( hour >= 0 && hour < 24 );
assert( minute >= 0 && minute < 60 );
assert( second >= 0 && second <= 60 ); // leap seconds... maybe
snprintf( target, 9, "%02d:%02d:%02d", hour, minute, second );
}
坚持下去,最后一个功能主要是错误检查。我们可以再次变得愚蠢并使用#define
:
#define getHourMinuteSecond(tgt,h,m,s) snprintf(tgt,9,"%02d:%02d:%02d",h,m,s)
最后,在您的原始代码中,您不会将hour
,minute
或second
作为参数,因此您可能希望该函数确定它们吗?
void getHourMinuteSecond( char target[9] ) {
assert( target != NULL );
const time_t now = time( 0 );
const tm *const tmnow = localtime( &now );
snprintf( target, 9, "%02d:%02d:%02d", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec );
}
答案 2 :(得分:0)
你可以返回一个字符串,concat hour,min和sec,如:
str =小时+分钟+秒
这样做使用函数strcat(destination,source)(#include) 像那样的意志:
char *getHour(....)
{
char str[20];
strcpy(str,hour);
strcat(str,":");
strcat(str,min);
strcat(str,":");
strcat(str,"sec);
return str;
}