Linux平台的ctime 函式

2021-07-29 16:32:48 字數 1444 閱讀 6975

最近在從mysql資料庫取資料,顯示到介面上時,發現第三列明顯比前面2列顯示要靠上(不在同一水平線上)。

想到應該是在向資料庫插入資料時使用的是ctime()函式,記得這個函式返回的const char *末尾有乙個\n(換行符)。man手冊給出ctime()說明:

it  converts  the calendar time t into a null-terminated string of the form

"wed jun 30 21:49:08 1993\n"

要把原來插入資料庫的**進行以下修改(大概多加3行)

/* 修改前 */

time(&timer);

bzero(sql, 100);

sprintf( sql, "insert into online_dev(ip,port,time) values('%s',%d,'%s')", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port), ctime(&timer));

/* 修改後 */

time(&timer);

char ch[26]=; //ctime()返回字串長度是25

strcpy(ch, ctime(&timer));

ch[25]=0; //把換行符(\n)換成0

bzero(sql, 100);

sprintf( sql, "insert into online_dev(ip,port,time) values('%s',%d,'%s')", inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port), ch);

修改後截圖:

說道ctime(),以前還鬧過笑話,先看正常**

#include #include int main()

當時以為自己聰明謝了下面一段**:

#include #include int main()

本來以為可以省掉乙個中間變數timer,而且顯得高大上。編譯時給出錯誤:

單目『&』的運算元必須是左值,這段**想直接對time()的返回值取位址,這是絕對不正確的,因為函式返回值是匿名變數,只能當右值,不可以做左值。如果真要想使用這個匿名或者說是臨時變數,可以使用c++的常引用來接這個返回值。**如下:

#include #include int main()

記得編譯時用g++,不要用gcc了。

ctime 函式以及time 使用

c 庫函式char ctime const time t timer 返回乙個表示當地時間的字串,當地時間是基於引數 timer。返回的字串格式如下 www mmm dd hh mm ss yyyy其中,www表示星期幾,mmm是以字母表示的月份,dd表示一月中的第幾天,hh mm ss表示時間,y...

對ctime和astime的理解

用同一塊buffer,通過下面兩個程式測試出來.include include using namespace std int main ifdef aix ptime asctime gmtime time t now else ptime asctime gmtime long now endi...

對atime mtime和ctime的研究

前期準備 在實驗之前我們在討論為何會出現兩種修改時間,為此我們推測因為修改的不是檔案的同一資料,或者說同一地方,那麼我們就要先搞清楚檔案的結構。linux檔案系統是linux系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 也有用512位元組為一塊的...