Time of Update: 2018-12-03
給c++程式員的一份禮物——常用工具集【聲明】如需複製、傳播,請附上本聲明,謝謝。原文出處:http://morningspace.51.net/,moyingzz@etang.com 所謂"工欲善其事,必先利其器",從程式員的角度來講,好工具的使用總會給人帶來事半功倍的效果。面對眾多工具/軟體,我們應該如何取捨呢。前不久,筆者在csdn的c++論壇發了一篇貼文,以期能徵求大家的廣泛意見,得到了不錯的反響。本文在對該貼進行整理的基礎上,又做了一些補充。在這裡要特別感謝網友:DanielWYO(
Time of Update: 2018-12-03
指標是C/C++語言的特色,而數組名與指標有太多的相似,甚至很多時候,數組名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在C語言的教學過程中也錯誤得給學生講解:"數組名就是指標"。很幸運,我的大學老師就是其中之一。時至今日,我日複一日地進行著C/C++項目的開發,而身邊還一直充滿這樣的程式員,他們保留著"數組名就是指標"的誤解。 想必這種誤解的根源在於國內某著名的C程式設計教程。如果這篇文章能夠糾正許多中國程式員對數組名和指標的誤解,筆者就不甚欣慰了。藉此文,筆
Time of Update: 2018-12-03
#include <stdio.h> #include <malloc.h> void print(char *,int); main() { char *s1 = "abcde"; char *s2 = "abcde"; char s3[] = "abcd"; long int *s4[100]; char *s5 = "abcde"; int a = 5; int b =6;//a,b在棧上,&a>
Time of Update: 2018-12-03
C++用Winsock實現語音全雙工系統通訊http://www.4oa.com/Article/html/6/33/486/2005/17465.htmlhttp://www.4oa.com/Article/html/6/33/486/2005/17465_2.html一、引言 Windows 95作為微機的作業系統,已經完全融入了網路與通訊功能,不僅可以建立純Windows 95環境下的“對等網路”,而且支援多種協議,如TCP/IP、IPX/SPX、NETBUI等。在TCP/IP協議組中,
Time of Update: 2018-12-03
比如說你用C++開發了一個DLL庫,為了能夠讓C語言也能夠調用你的DLL輸出(Export)的函數,你需要用extern "C"來強制編譯器不要修改你的函數名。通常,在C語言的標頭檔中經常可以看到類似下面這種形式的代碼: #ifdef __cplusplus extern "C" { #endif /**** some declaration or so *****/ #ifdef __cplusplus } #endif /* end of __cplusplus */
Time of Update: 2018-12-03
在業務複雜的應用程式中,有時候會要求一個或者多個任務在一定的時間或者一定的時間間隔內計划進行,比如定時備份或同步資料庫,定時寄送電子郵件等,我們稱之為計劃任務。實現計劃任務的方法也有很多,可以採用SQLAgent執行預存程序來實現,也可以採用Windows任務發送器來實現,也可以使用Windows服務來完成我們的計劃任務,這些方法都是很好的解決方案。但是,對於Web應用程式來說,這些方法實現起來並不是很簡單的,主機服務提供者或者不能直接提供這樣的服務,或者需要你支付許多額外的費用。
Time of Update: 2018-12-03
眾所周知,UDP是不需連線的,可是當實際現場使用時,如果遠程主機異常關閉,伺服器則會拋出一個異常:遠程主機強行關閉了一個串連而一但這個異常拋出後,又沒有及時處理,那麼整個UDP服務都將崩潰而不能接收任何資料處理的方法是uint IOC_IN = 0x80000000; uint IOC_VENDOR = 0x18000000; uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12; udp.Client.IOControl((int)SIO_UDP_
Time of Update: 2018-12-03
指標使用中的根本問題:1. 記憶體流失;2. 野指標(指標指向已經被無效的記憶體上);尤其是當多個指標指向同一個記憶體地區的時候, 哪個指標來負責析構, 是最頭疼的事情了.針對這種情況, 應該先引出指標的所有權問題:指標指向的記憶體誰來釋放, 誰就是擁有所有權.分三類情況:1. 一個指標有清晰的所有權;2. 幾個指標共有所有權;3. 一些指標只有引用權;共用所有權指標的需求:ViSharePtr m_sp1 = new ViObj;m_sp2 = m_sp1;m_sp1 = NULL;//!
Time of Update: 2018-12-03
很早以前就想做一個DNS伺服器,用來應用到一些特殊的環境中,比如C/S結構的簡單負載平衡,將用戶端的請求按一定方法負載到不同的伺服器上,同時對故障伺服器實現轉移等。目前這個工程實現了網域名稱的基本解析,可以完成網域名稱到IP的轉換,但距實際使用還是有一定距離的,如果要應用到實際環境中,還需要完善。工程:http://download.csdn.net/detail/xunpo/4449410
Time of Update: 2018-12-03
在《高品質編程指南_林銳》的第九章開頭部分有一段話, "預設的拷貝建構函式 和 預設的賦值函數 均採用 '位拷貝' 而非 '值拷貝' 的方式實現, 倘若類中含有指標變數, 這兩個函數註定將出錯 " 其中吸引我眼球的是 "位拷貝" 這個字眼, E文好像是 "bitwise copy", 全稱"逐位拷貝". 沒看過E文原版的, 這些是網上看到的. 說實話, 拋出一個概念性的東西, 而沒有作一定的解釋,
Time of Update: 2018-12-03
C++程式設計語言中,有一種專門應對類型定義的用法,叫做C++ typedef。那麼我們應該如何正確理解這一應用呢?在這篇文章中,我們會通過C++ typedef不同使用方法來對這一應用進行詳細介紹。C++ typedef,顧名思義,為“類型定義”,可以解釋為:將一種資料類型定義為某一個標識符,在程式中使用該標識符來實現相應資料類型變數的定義。例如:typedef unsigned int UINT; int main (int argc, char *argv[]) {
Time of Update: 2018-12-03
輸入輸出資料流在<iostream>中定義,並且在這個標頭檔中還聲明了標準控制台輸出資料流cout包含控制符的標頭檔:標準標頭檔<ios> 和 <iomanip> 輸出資料流:boolalpha 和 noboolalpha:
Time of Update: 2018-12-03
一直在看《C++ Primer 第四版》和 《C++ 程式設計教程》 (錢能 主編)在《C++ Primer 第四版》的 4.2.4節 , 《C++ 程式設計教程》8.3節 都有講關於 指標和數組 的知識。 我把前者稱為 A, 後者稱為 B吧。 A 的東西是比較全的, 相對於B。 不過B 的東西直擊重點, 並且例子舉的好。 1. 在運算式中使用數組名時, 該名字會自動轉換為指向數組第一個元素的指標(B中是第一個元素地址, 個人覺得指標更貼切, 指標做加減法很正常嘛).
Time of Update: 2018-12-03
載自《C++ Primer 第四版》12.4.3節 3. 使用預設建構函式 初級 C++ 程式員常犯的一個錯誤是, 採用以下方式聲明一個用預設建構函式初始化的對象: //oops! declares a function , not an object Sales_item myObj(); 編譯 myObj 的聲明沒有問題. 然而, 當我們試圖使用 myObj 時 Sales_item myObj(); //OK: but defines
Time of Update: 2018-12-03
#include <iostream>#include <cmath> /* 作者: lin49940 日期: 2010.4.28*/int sign(int x){ int a[3] = {-1, 1, 0}; return a[(x + 2)/(abs(x)+1)]; //+1 是為了避免除0的情況}int main(){ using namespace std; cout << sign(19) <
Time of Update: 2018-12-03
C風格字串:對字串進行操作的 C 函數定義在標頭檔<cstring>中; 1. 字串定義:char* result; 2. 字串的最後一個字元是null字元('/0'),可以通過這個字元確定字串的結尾。 3. strlen()返回的是字串的大小;因此,分配空間的時候,需要比字串的實際空間大1. e.g. char* copyString(const char* inString) { char
Time of Update: 2018-12-03
#include <iostream>using namespace std;class C{ public: C(){cout << "chuangjiang C" << endl;} C(const C &other){cout << "coping C" << endl;} C & operator = (const C
Time of Update: 2018-12-03
#include <iostream>#include <ctime>#include <cstdlib>using namespace std;//顯示所有球 inline void show(const int ball[], int len){ for(int i = 0; i < len; ++i){ cout << ball[i] << " "; } cout <<
Time of Update: 2018-12-03
#include <iostream>using namespace std;//反序字串chs到字串rchs. //參數:chs[]原字串, rchs[]目的字串, len 長度 inline void reverse(const char chs[], char rchs[], int len){ int rindex = len; for(int i=0; i < len; ++i){ rchs[--rindex] = chs[i]; }
Time of Update: 2018-12-03
#include <iostream>#include <io.h>#include <string>/* 作者: lin49940 日期: 2010.5.1 */using namespace std;/* * 查詢指定的目錄下的檔案和檔案夾, 返回其數目, * 檔案和檔案夾資訊儲存在指標pfile 指向的_finddata_t 數組中 * 參數: dirPath 指定目錄; * 參數: pfile 指標,