字串指標和字元陣列的詭異問題

2021-06-22 23:39:53 字數 1224 閱讀 8954

背景:qt程式設計,datetimeedit是乙個qcombobox下拉列表控制項,從中讀取事件日期轉換為char 型別,eventlogmessage.shartdatetime是char * 型別。

這是最原始的實現方法:

qdatetime dd = ui->datetimeedit->datetime();

qstring tt = dd.tostring("yyyy-mm-dd hh:mm:ss");

qbytearray aa =tt.tolatin1();

eventlogmessage.shartdatetime=aa.data(); 

第一種修改方法:做乙個函式實現,函式輸入引數為ui->datetimeedit->datetime(),返回值為aa.data(); 

char *dvr_eventlog::datetimetochar(qdatetime datetime)

主函式呼叫處:

eventlogmessage.shartdatetime=datetimetochar(ui->datetimeedit->datetime());

結果是:printf列印驗證結果是對的,但是後面這個時間資料用於sqlite資料檢索讀出的時候就有問題了。

第二種修改方法:做乙個無返回值的函式,使用引數傳出方式返回aa.data(); 值

void dvr_eventlog::datetimetochar(qdatetime datetime,char *tmp)

主函式呼叫處:

char tmp[50];

datetimetochar(ui->datetimeedit->datetime(),tmp);

eventlogmessage.shartdatetime=tmp;

結果是:printf列印的結果與前兩種方式完全相同strlen長度也相同,但這樣就可以檢索出來(與之前相同的日期時間,格式也相同)

第三種修改方法:還是做乙個無返回值得函式,使用兩級指標返回字串

void dvr_eventlog::datetimetochar(qdatetime datetime,char **tmp)

主函式呼叫處:

char *tmp;

datetimetochar(ui->datetimeedit->datetime(),&tmp);

eventlogmessage.shartdatetime=tmp;

疑問:這樣做有問題嗎?

最終結果:採用方式二

字串指標和字元陣列

很多剛從c 轉c 的人都不明白,在c 中這樣的 char pchar hello!定義字元指標pchar 指向乙個字元陣列首 元素即h pchar h 問題所在行 到了c 中怎麼就不行了?你翻遍參考書,都會說,pchar 指向的是常量,怎麼能允許改變呢?你又問了,怎麼我在c 中執行的好好的?沒人回答...

C 字元 字串 字元陣列 字串指標 指標陣列

一 c 字元 字串 字元陣列 字串指標 指標陣列 前言 一 字元指標 字元陣列 二 字串指標 三 字串 指標陣列 四 常用方法 參考為了深入理解c 並時常回顧學過的知識點,對c 知識點進行記錄總結。參考1字元指標的儲存方式 字元指標變數本身是乙個變數,用於存放字元 字串的首位址。字串本身是存放在以該...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...