[英]C - avoiding a newline when using fprintf with time.h
在將當前時間寫入 log.txt 文件后,我不斷打印新行。 在此示例中,我希望將時間和 logMessage 打印在同一行上。 你能指出我在這里缺少什么的正確方向嗎?
從主function調用logWrite function:
strcpy(logMessage, "**********RESTART**********");
logWrite(logMessagePtr);
logWrite function 是:
void logWrite(char * logMessagePtr)
{
/* Initialise time variables for log file. */
int hours, minutes, seconds, day, month, year;
// time_t is an arithmetic time type
time_t now;
// Update current time using time(&now);
time(&now);
FILE * logFilePtr;
logFilePtr = fopen ("C:\\log.txt", "a");
if (logFilePtr != NULL)
{
fprintf(logFilePtr, ("%s", ctime(&now)));
fprintf(logFilePtr, "%s", logMessagePtr);
fprintf(logFilePtr,"\n");
fclose(logFilePtr);
printf("Log file found\n"); //debug
}
else
{
perror("log.txt");
}
}
log.txt 文件已成功(創建)附加到,但在將時間寫入文件后,我始終得到一個新的換行符。
例如,當我連續兩次運行該程序時,log.txt 顯示為:
Sat May 22 09:16:47 2021
**********RESTART**********
Sat May 22 09:16:48 2021
**********RESTART**********
我想要的是:
Sat May 22 09:16:47 2021 **********RESTART**********
Sat May 22 09:16:48 2021 **********RESTART**********
時間信息.h
調用
ctime(t)
等效於asctime(localtime(t))
。 它將日歷時間 t 轉換為形式為 null 的字符串"Wed Jun 30 21:49:08 1993\n"
看起來添加換行符包含在ctime()
的規范中。 您應該使用strftime()
手動格式化沒有換行符的日期和時間。
char date[128];
strftime(date, sizeof(date), "%a %b %d %T %Y", localtime(&now));
fprintf(logFilePtr, "%s", date);
根據ctime
的文檔,該字符串嵌入了換行符。 您需要將其從打印考慮中刪除。
由於ctime
返回的字符串具有恆定寬度的指定格式,這應該實現:
fprintf(logFilePtr, "%.24s ", ctime(&now));
(編輯:這是假設您首先希望使用ctime
,就像您在問題中所做的那樣。還有其他可能更好的選項,例如strftime
。)
ctime
function 總是將'\n'
添加到 string 的末尾。 有很多不同的方法可以解決這個問題,但最簡單的方法是刪除這個符號。 例如,可以這樣做(基於ctime
( 參見 man )返回char *
,而不是const char *
的事實):
#include <string.h>
...
char *ctime_line = ctime (&now);
ctime_line[strlen (ctime_line) - 1] = '\0';
然后打印這一行:
fprintf (logFilePtr, "%s", ctime_line);
PS 我不推薦使用這樣的記錄,因為字符串 AAA 可能包含例如 % 字符,它將被解釋為特殊字符。
// bad
fprintf (logFilePtr, logMessagePtr);
// good
fprintf (logFilePtr, "%s", logMessagePtr);
PPS 以下三行
fprintf (logFilePtr, "%s", ctime (&now));
fprintf (logFilePtr, "%s", logMessagePtr);
fprintf (logFilePtr, "\n");
可以合並為一個
fprintf (logFilePtr, "%s %s\n", ctime (&now), logMessagePtr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.