2

システム時間の出力と同じ行に値を出力したい場合、簡単な質問があります。これは可能ですか?

char *date;
time_t timer;
timer=time(NULL);
date = asctime(localtime(&timer));
//printf("Current Date: %s", date);


  std::cout << date << ", " << randomNumber  << std::endl;

  if (file.is_open())
  {
    file << date;
    file << ", ";
    file << randomNumber;
    file << "\n";
  }

私が期待していたのは、これを出力として取得することです。

Wed Jan 16 16:18:56 2013, randomNumber

しかし、私がファイルに入れることになるのは次のとおりです。

Wed Jan 16 16:18:56 2013
, randomNumber

また、単純な std::cout を実行したところ、同じ結果が得られました。システムが出力の最後に終了行を強制しているようですが、とにかくありますか?これを抑制できますか?

4

4 に答える 4

8

日付文字列の '\n' 文字 (null で終了する場合は strlen(date) - 1 である必要があります) を '\0' に置き換えるだけで、同じ行に出力されます。

date[strlen(date) - 1] = '\0';

EDIT:Joachimが指摘したstrlenように、生の割り当て長ではなくNULLターミネータなしで長さを返すため、-2ではなく-1にする必要があります。

于 2013-01-17T00:23:11.880 に答える
3

改行文字は、 から返される文字列の最後の文字asctimeです。これを削除する最も簡単な方法は、文字列終了文字に置き換えること'\0'です。

Windows に関する注意: Windows には、改行、キャリッジ リターン、および通常の改行の2 つの文字があります。したがって、Windows では、最後から2 番目の文字で終了する必要があります。Windows プラットフォームと非 Windows プラットフォーム間でコードを移植できるようにする場合は、そのためのチェックを追加する必要があります。'\r''\n'

于 2013-01-17T00:24:19.117 に答える