それが私が欲しいものです:
char *getHour(){
return ("%d:%d:%d",hour, min, sec);
}
「hh:mm:ss」のような文字列を返すにはどうすればよいですか?
考えられる実装の 1 つを以下に示します。
編集: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
私はあなたがこれを行う正当な理由があるふりをします. 探しているコードは次のとおりです。
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 );
}
次のように、連結された時間、分、秒の文字列を 1 つだけ返すことができます。
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;
}