最近在從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位元組為一塊的...