-1

s printf の代わりに strcat 関数を使用して、次の形式を変換する際に助けが必要です。

const char* const MSG_STAMP_PRINTF_FORMAT = "%c %04d-%02d-%02d %02d:%02d:%02d.%03d";

char cMsgStamp[500];
char cSevChr = 'I'; 

struct tm gmt;

// Calculate Day/Hour/Min/Sec
gmtime_r((time_t *)&pMsg->iSysTimeSec, &gmt);

int iSysTimeMs = 100;

// Format the begining of the message, the message stamp

sprintf(&cMsgStamp[0],
         MSG_STAMP_PRINTF_FORMAT,
         cSevChr, gmt.tm_year+1900, gmt.tm_mon + 1, gmt.tm_mday, gmt.tm_hour, gmt.tm_min, gmt.tm_sec,iSysTimeMs
             ); is 0x%s\n", n3);

sprintf を使用する代わりに、いくつかの strcat 関数を使用して、上記の cMsgStamp に存在する同じ情報を取得する必要があります。

誰でもこれについて私を助けることができます。ありがとう!ヴェンカタ RKA

4

1 に答える 1

0

整数n、桁数d、および「十分な大きさ」(少なくとも n+1 バイト長) のバッファが与えられた場合に、「%04d」などをフォーマットする作業を行う1 つの補助関数を作成する必要があります。この関数は を使用する可能性がありますstrcat()が、おそらく使用しないでしょう。

フォーマット文字列をステップスルーし、さまざまなビット (基本的には % シーケンスとその他の文字があります) を分離し、それらを適切に処理できるメイン関数が必要です。これは を使用するかもしれませんstrcat()が、2 つのバッファーを使用していない限り、おそらく使用しないでしょう。1 つは最初の (補助) 関数からの一時的な結果を保持し、もう 1 つは最終結果を保持します。(2 つのバッファーを使用する必要はないと思いますが、使用する言い訳にはなりますstrcat()。)

バッファーの大きさがメイン関数に通知され、バッファーの境界をオーバーフローしないことを確認してください。コピー先のバッファに含まれるデータの量、追加する文字列に含まれるデータの量、および使用しているバッファ全体の長さが正確にわかっている場合にのみ、 strcat()(または)を安全に使用できます。strncat()そして、特に、strncat()災害を招くインターフェイス - 最後の (サイズ) 引数は、ターゲット バッファーのサイズではありません (ほとんどの同様の呼び出しにあるように)。これは、バッファーに残っているスペースの量です。

于 2010-11-11T15:02:59.103 に答える