-1

それが私が欲しいものです:

char *getHour(){
return ("%d:%d:%d",hour, min, sec);
}

「hh:mm:ss」のような文字列を返すにはどうすればよいですか?

4

3 に答える 3

2

考えられる実装の 1 つを以下に示します。

編集:static配列にデイブの提案を組み込みsnprintfconst 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

于 2013-03-27T00:16:52.887 に答える
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)

最後に、元のコードではhourminuteまたは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 );
}
于 2013-03-27T00:17:16.450 に答える
0

次のように、連結された時間、分、秒の文字列を 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;

}
于 2013-03-26T23:54:16.443 に答える