[C/C++]function中local變數的設定

posted in: C/C++程式設計 | 0

有時候在一個function之中如果想要宣告一個以上的暫存變數該怎麼辦? 一個一個命名成不同的變數名稱時又不是非常的直觀, 因為我們只是想暫時使用那個變數而已一堆不同的變數名稱, 反而讓看的人痛苦而且自己也難以管理 此時我們就可以用{ }來指定哪邊到哪邊是該function的local,如下面的code: function foo(){ { int i = 0; cout < < i

[C/C++]解決MySQL多國語系(中文、日文)插入時變成亂碼問題

posted in: C/C++程式設計, MySQL, Server | 0

MySQL的亂碼問題果然兇惡…(苦笑) 我試著插入下面的文字的結果居然都是亂碼: string SQL = “insert test(t) values(‘測試中文’)”; 在網路上找教學,幾乎每篇都是說在connect之後insert之前輸入以下指令就行了: mysql_query(conn, “SET NAMES ‘utf8′”); 可是我不管怎麼試都還是失敗 後來試著去找原因,發現語系是有分client跟server二種 雖然我的mysql DB(server)全都是用utf8建好的,可是c++中的string在IDE內的文字,只會認識local作業系統的語系(我用繁體中文,所以是big5) 因此必需要對應好我們文件的語系: mysql_query(conn, “SET NAMES ‘big5′”); 可是以上方法只能解決中文問題 但如果我們需要插入的語句中夾雜著中文及日文及多國字時該怎麼辦呢?用上面的方法只會讓中文正確,但日文還是錯的… 如下面的文字: string SQL = “insert test(t) values(‘測試中文與日本語testかなかな’)”; 我想那是我們的編譯器無法判別哪個字元該拿什麼語系來轉才好,所以才會出現日文字都變成???? 這部份我找了好久還是找不到解決方案 先轉wstring之後再用WideCharToMultiByte也轉成特定語系(利用code page) 也是會發生不知道哪個字元是哪國字的情況… 悲哀的是,MySQL的c api不支援wide string,所以這問題看似是無解了!? 如果有路過的人知道該怎麼解決的話,請告訴我一下吧~我會非常感激的 … Continued

[C/C++]error C2872: ‘system’ : ambiguous symbol

posted in: boost, C/C++程式設計, html | 2

會產生這個錯誤的原因,是由於function名稱跟別的library裡宣告的名稱衝到了 例如我想加入boost的file system進來使用: #include "boost/filesystem.hpp" #define BOOST_FILESYSTEM_VERSION 3 結果呼叫system時馬上就產生了這個錯誤。(因為boost的filesystem裡面已經有system這個宣告了 那麼解決方法是什麼? 很簡單,在前面加上一個name space指定就行了,如: std::system("pause"); (因為system的name space是std) ok,這樣錯誤就自動解除了 參考:http://www.boost.org/doc/libs/1_46_0/libs/filesystem/v3/doc/reference.html

[VC++]VC編譯器有錯誤時就自動停止

posted in: C/C++程式設計 | 0

有時候當程式碼一大,在編譯時就要等很久 這時候如果裡面有錯誤的話更是令人抓狂… Visual Studio又沒有手動停止編譯的功能,這時候該怎麼辦? 其實我們可以插入一個macro來實現這個功能 做法如下: 進到visual studio->Tools->Macros->Macro IDE,然後插入下面的程式碼 Private Sub OutputWindowEvents_OnPaneUpdated(ByVal pPane As OutputWindowPane) Handles OutputWindowEvents.PaneUpdated If Not (pPane.Name = “Build”) Then Exit Sub pPane.TextDocument.Selection.SelectAll() Dim Context As String = pPane.TextDocument.Selection.Text pPane.TextDocument.Selection.EndOfDocument() Dim found As Integer = Context.IndexOf(“: error … Continued

[boost]字串trim與數值轉換

posted in: boost, C/C++程式設計 | 0

用下面的方法,可以把一個字串多餘的部份拿掉並將其轉成浮點數:(沒去掉後面的1的話會產生run time錯誤) string data = ” abc: 3.40 1 ” boost::trim(data);//把前面跟後面的空白去掉 boost::trim_if(data, boost::is_any_of(“abc: “));//拿掉abc: boost::algorithm::trim_right_if(data, is_any_of(” 1″));//拿掉後面的1 float value = boost::lexical_cast(data); 執行結果:3.4

[boost] regex

posted in: boost, C/C++程式設計 | 0

一直match不成功,原來是我忘了在C++裡面需要二個\\阿…(因為\在C++裡面是脫逸字元,有特殊的意義) 以下記錄一下match日期成功的方式: regex expression(“\\d{4}-\\d{2}-\\d{2}.\\d{2}:\\d{2}:\\d{2}.*”); string tmpStr = “2011-02-24 13:31:37”; cmatch what; if(regex_match(tmpStr.c_str(), what, expression)){ cout < < “match” << endl; std::string msg(what[1].first, what[1].second); std::cout<< msg.c_str() << std::endl; }