锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎬葷粨鑷繁鍐欑▼搴忔椂鐨勫彉閲忥紝鍑芥暟鍛藉悕椋庢牸錛?br> example :
pointer --> p_+varname; int *p_ivalue = NULL;
typedef --> t_+typenam; typedef struct name t_name
globle variable --> g_+typevarname int g_ivalue = 0;
member variable --> m_+typevarname int m_ivalue = 0;
static variable --> s_+typevarname static int s_ivalue = 0;
temp variable --> typevarname int ivalue = 0;
string varable --> str_varname string str_name;
const string varalbe --> cstr_varname const string cstr_name
function style :
extern int name_name_name(type var_name,...)
#define 鍙槸鐢ㄦ潵鍋氭枃鏈浛鎹㈢殑
渚嬪錛?/p>
#define Pi 3.1415926
float angel;
angel=30*Pi/180;
閭d箞錛屽綋紼嬪簭榪涜緙栬瘧鐨勬椂鍊?緙栬瘧鍣ㄤ細棣栧厛灝?“#define Pi 3.1415926”浠ュ悗鐨勶紝鎵鏈変唬鐮佷腑鐨?#8220;Pi”鍏ㄩ儴鎹㈡垚 “3.1415926”
鐒跺悗鍐嶈繘琛岀紪璇戙?/p>
鎴戞煡鍒頒竴涓const涓?define鐨勫樊鍒殑甯栧瓙錛岄噷闈㈣皥鍒癱onst涓?define鏈澶х殑宸埆鍦ㄤ簬錛氬墠鑰呭湪鍫嗘爤鍒嗛厤浜嗙┖闂達紝鑰屽悗鑰呭彧鏄妸鍏蜂綋鏁板肩洿鎺ヤ紶閫掑埌鐩爣鍙橀噺緗簡銆傛垨鑰呰錛宑onst鐨勫父閲忔槸涓涓猂un-Time鐨勬蹇碉紝浠栧湪紼嬪簭涓‘紜疄瀹炵殑瀛樺湪騫跺彲浠ヨ璋冪敤銆佷紶閫掋傝?define甯擱噺鍒欐槸涓涓狢ompile-Time姒傚康錛屽畠鐨勭敓鍛藉懆鏈熸浜庣紪璇戞湡錛氬湪瀹為檯紼嬪簭涓粬鍙槸涓涓父鏁般佷竴涓懡浠や腑鐨勫弬鏁幫紝娌℃湁瀹為檯鐨勫瓨鍦ㄣ?
const甯擱噺瀛樺湪浜庣▼搴忕殑鏁版嵁孌碉紝#define甯擱噺瀛樺湪浜庣▼搴忕殑浠g爜孌點?/font>
鑷充簬涓よ呯殑浼樼己鐐癸紝瑕佺湅鍏蜂綋鐨勬儏鍐典簡銆備竴鑸殑甯告暟搴旂敤錛岀瑪鑰呬釜浜鴻涓?define鏄竴涓洿濂界殑閫夋嫨錛?/font>
i.浠巖un-time鐨勮搴︽潵鐪嬶紝浠栧湪絀洪棿涓婂拰鏃墮棿涓婇兘鏈夊緢濂戒紭鍔褲?/font>
ii.浠巆ompile-time鐨勮搴︽潵鐪嬶紝綾諱技m=t*10鐨勪唬鐮佷笉浼氳緙栬瘧鍣ㄤ紭鍖栵紝t*10鐨勬搷浣滈渶瑕佸湪run-time鎵ц銆傝?define鐨勫父閲忎細琚悎騫訛紙鍦ㄤ笂渚嬩腑T*10灝嗚0x82鍙栦唬錛夈?/font>
浣嗘槸錛氬鏋滀綘闇瑕佺矖椴佺殑淇敼甯告暟鐨勫鹼紝閭e氨寰椾嬌鐢╟onst浜嗭紝鍥犱負鍚庤呭湪紼嬪簭涓病鏈夊疄闄呯殑瀛樺湪銆傦紙鍏跺疄搴旇璇翠慨鏀規暟鎹姣斾唬鐮佹瑕佺畝鍗昢_^錛夈?/font>
鏈夊叧#define鐨勭敤娉?/font>
1.綆鍗曠殑define瀹氫箟
#define MAXTIME 1000
紼嬪簭涓亣鍒?/span>MAXTIME灝變細褰撲綔1000鏉ュ鐞?/span>.
涓涓畝鍗曠殑MAXTIME灝卞畾涔夊ソ浜嗭紝瀹冧唬琛?/span>1000錛屽鏋滃湪紼嬪簭閲岄潰鍐?/span>
if(i<MAXTIME){.........}
緙栬瘧鍣ㄥ湪澶勭悊榪欎釜浠g爜涔嬪墠浼氬MAXTIME榪涜澶勭悊鏇挎崲涓?/span>1000銆?/span>
榪欐牱鐨勫畾涔夌湅璧鋒潵綾諱技浜庢櫘閫氱殑甯擱噺瀹氫箟CONST錛屼絾涔熸湁鐫涓嶅悓錛屽洜涓?/span>define鐨勫畾涔夋洿鍍忔槸綆鍗曠殑鏂囨湰鏇挎崲錛岃屼笉鏄綔涓轟竴涓噺鏉ヤ嬌鐢紝榪欎釜闂鍦ㄤ笅闈㈠弽鏄犵殑灝や負紿佸嚭銆?/span>
涓銆乼ypedef鐨勭敤娉?/strong>
鍦–/C++璇█涓紝typedef甯哥敤鏉ュ畾涔変竴涓爣璇嗙鍙婂叧閿瓧鐨勫埆鍚嶏紝瀹冩槸璇█緙栬瘧榪囩▼鐨勪竴閮ㄥ垎錛屼絾瀹冨茍涓嶅疄闄呭垎閰嶅唴瀛樼┖闂達紝瀹炰緥鍍忥細
typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
typedef鍙互澧炲己紼嬪簭鐨勫彲璇繪э紝浠ュ強鏍囪瘑絎︾殑鐏墊椿鎬э紝浣嗗畠涔熸湁“闈炵洿瑙傛?#8221;絳夌己鐐廣?/p>
浜屻?define鐨勭敤娉?/strong>
#define涓轟竴瀹忓畾涔夎鍙ワ紝閫氬父鐢ㄥ畠鏉ュ畾涔夊父閲?鍖呮嫭鏃犲弬閲忎笌甯﹀弬閲?錛屼互鍙婄敤鏉ュ疄鐜伴偅浜?#8220;琛ㄩ潰浼煎拰鍠勩佽儗鍚庝竴闀夸覆”鐨勫畯錛屽畠鏈韓騫朵笉鍦ㄧ紪璇戣繃紼嬩腑榪涜錛岃屾槸鍦ㄨ繖涔嬪墠(棰勫鐞嗚繃紼?灝卞凡緇忓畬鎴愪簡錛屼絾涔熷洜姝ら毦浠ュ彂鐜版綔鍦ㄧ殑閿欒鍙婂叾瀹冧唬鐮佺淮鎶ら棶棰橈紝瀹冪殑瀹炰緥鍍忥細
#define INT int
#define TRUE 1
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++)
鍦⊿cott Meyer鐨凟ffective C++涓涔︾殑鏉℃1涓湁鍏充簬#define璇彞寮婄鐨勫垎鏋愶紝浠ュ強濂界殑鏇夸唬鏂規硶錛屽ぇ瀹跺彲鍙傜湅銆?/p>
涓夈乼ypedef涓?define鐨勫尯鍒?/strong>
浠庝互涓婄殑姒傚康渚夸篃鑳藉熀鏈竻妤氾紝typedef鍙槸涓轟簡澧炲姞鍙鎬ц屼負鏍囪瘑絎﹀彟璧風殑鏂板悕縐?浠呬粎鍙槸涓埆鍚?錛岃?define鍘熸湰鍦–涓槸涓轟簡瀹氫箟甯擱噺錛屽埌浜咰++錛宑onst銆乪num銆乮nline鐨勫嚭鐜頒嬌瀹冧篃娓愭笎鎴愪負浜嗚搗鍒悕鐨勫伐鍏楓傛湁鏃跺緢瀹規槗鎼炰笉娓呮涓巘ypedef涓よ呭埌搴曡鐢ㄥ摢涓ソ錛屽#define INT int榪欐牱鐨勮鍙ワ紝鐢╰ypedef涓鏍峰彲浠ュ畬鎴愶紝鐢ㄥ摢涓ソ鍛紵鎴戜富寮犵敤typedef錛屽洜涓哄湪鏃╂湡鐨勮澶欳緙栬瘧鍣ㄤ腑榪欐潯璇彞鏄潪娉曠殑錛屽彧鏄幇浠婄殑緙栬瘧鍣ㄥ張鍋氫簡鎵╁厖銆備負浜嗗敖鍙兘鍦板吋瀹癸紝涓鑸兘閬靛驚#define瀹氫箟“鍙”鐨勫父閲忎互鍙婁竴浜涘畯璇彞鐨勪換鍔★紝鑰宼ypedef鍒欏父鐢ㄦ潵瀹氫箟鍏抽敭瀛椼佸啑闀跨殑綾誨瀷鐨勫埆鍚嶃?/p>
瀹忓畾涔夊彧鏄畝鍗曠殑瀛楃涓蹭唬鎹?鍘熷湴鎵╁睍)錛岃宼ypedef鍒欎笉鏄師鍦版墿灞曪紝瀹冪殑鏂板悕瀛楀叿鏈変竴瀹氱殑灝佽鎬э紝浠ヨ嚧浜庢柊鍛藉悕鐨勬爣璇嗙鍏鋒湁鏇存槗瀹氫箟鍙橀噺鐨勫姛鑳姐傝鐪嬩笂闈㈢涓澶х偣浠g爜鐨勭涓夎錛?/p>
typedef (int*) pINT;
浠ュ強涓嬮潰榪欒:
#define pINT2 int*
鏁堟灉鐩稿悓錛熷疄鍒欎笉鍚岋紒瀹炶返涓宸埆錛歱INT a,b;鐨勬晥鏋滃悓int *a; int *b;琛ㄧず瀹氫箟浜嗕袱涓暣鍨嬫寚閽堝彉閲忋傝宲INT2 a,b;鐨勬晥鏋滃悓int *a, b;
琛ㄧず瀹氫箟浜嗕竴涓暣鍨嬫寚閽堝彉閲廰鍜屾暣鍨嬪彉閲廱銆?/p>
娉ㄦ剰錛氫袱鑰呰繕鏈変竴涓灝?鍙風殑鍖哄埆鍝︼紒
Origin:http://www.zhmy.com/blog2006004/goto723/archives/2006/29705.shtml
銆銆鏍?/font>錛屽氨鏄偅浜涚敱緙栬瘧鍣ㄥ湪闇瑕佺殑鏃跺欏垎閰嶏紝鍦ㄤ笉闇瑕佺殑鏃跺欒嚜鍔ㄦ竻闄ょ殑鍙橀噺鐨勫瓨鍌ㄥ尯銆傞噷闈㈢殑鍙橀噺閫氬父鏄眬閮ㄥ彉閲忋佸嚱鏁板弬鏁扮瓑銆?
銆銆鍫?/font>錛屽氨鏄偅浜涚敱new鍒嗛厤鐨勫唴瀛樺潡錛屽畠浠殑閲婃斁緙栬瘧鍣ㄤ笉綆★紝鑰屾槸鐢辯▼搴忓憳鑷繁鍘繪帶鍒訛紝涓鑸竴涓猲ew灝辮瀵瑰簲涓涓猟elete銆傚鏋滅▼搴忓憳娌℃湁閲婃斁鎺夛紝閭d箞鍦ㄧ▼搴忕粨鏉熷悗錛屾搷浣滅郴緇熶細鑷姩鍥炴敹銆?
銆銆鑷敱瀛樺偍鍖?/font>錛屽氨鏄偅浜涚敱malloc絳夊垎閰嶇殑鍐呭瓨鍧楋紝瀹冨拰鍫嗘槸鍗佸垎鐩鎬技鐨勶紝涓嶈繃瀹冩槸鐢╢ree鏉ョ粨鏉熻嚜宸辯殑鐢熷懡鐨勩?
銆銆鍏ㄥ眬/闈欐佸瓨鍌ㄥ尯錛屽叏灞鍙橀噺鍜岄潤鎬佸彉閲忚鍒嗛厤鍒板悓涓鍧楀唴瀛樹腑錛屽湪浠ュ墠鐨凜璇█涓紝鍏ㄥ眬鍙橀噺鍙堝垎涓哄垵濮嬪寲鐨勫拰鏈垵濮嬪寲鐨勶紝鍦–++閲岄潰娌℃湁榪欎釜鍖哄垎浜嗭紝浠栦滑鍏卞悓鍗犵敤鍚屼竴鍧楀唴瀛樺尯銆?
銆銆甯擱噺瀛樺偍鍖?/strong>錛岃繖鏄竴鍧楁瘮杈冪壒孌婄殑瀛樺偍鍖猴紝瀹冧滑閲岄潰瀛樻斁鐨勬槸甯擱噺錛屼笉鍏佽淇敼錛堝綋鐒訛紝浣犺閫氳繃闈炴褰撴墜孌典篃鍙互淇敼錛岃屼笖鏂規硶寰堝錛屽湪銆奵onst鐨勬濊冦嬩竴鏂囦腑錛屾垜緇欏嚭浜?縐嶆柟娉曪級
鏄庣‘鍖哄垎鍫嗕笌鏍?/font>
銆銆鍦╞bs涓婏紝鍫嗕笌鏍堢殑鍖哄垎闂錛屼技涔庢槸涓涓案鎭掔殑璇濋錛岀敱姝ゅ彲瑙侊紝鍒濆鑰呭姝ゅ線寰鏄販娣嗕笉娓呯殑錛屾墍浠ユ垜鍐沖畾鎷垮畠絎竴涓紑鍒銆?
銆銆棣栧厛錛屾垜浠婦涓涓緥瀛愶細
void f() {
int* p=new int[5];
}
銆銆榪欐潯鐭煭鐨勪竴鍙ヨ瘽灝卞寘鍚簡鍫嗕笌鏍堬紝鐪嬪埌new錛屾垜浠鍏堝氨搴旇鎯沖埌錛屾垜浠垎閰嶄簡涓鍧楀爢鍐呭瓨錛岄偅涔堟寚閽坧鍛紵瀹冨垎閰嶇殑鏄竴鍧楁爤鍐呭瓨錛屾墍浠ヨ繖鍙ヨ瘽鐨勬剰鎬濆氨鏄細鍦ㄦ爤鍐呭瓨涓瓨鏀句簡涓涓寚鍚戜竴鍧楀爢鍐呭瓨鐨勬寚閽坧銆?/span>
鍦ㄧ▼搴忎細鍏堢‘瀹氬湪鍫嗕腑鍒嗛厤鍐呭瓨鐨勫ぇ灝忥紝鐒跺悗璋冪敤operator new鍒嗛厤鍐呭瓨錛岀劧鍚庤繑鍥炶繖鍧楀唴瀛樼殑棣栧湴鍧錛屾斁鍏ユ爤涓紝浠栧湪VC6涓嬬殑姹囩紪浠g爜濡備笅錛?
00401028 push 14h
0040102A call operator new (00401060)
0040102F add esp,4
00401032 mov dword ptr [ebp-8],eax
00401035 mov eax,dword ptr [ebp-8]
00401038 mov dword ptr [ebp-4],eax
銆銆榪欓噷錛屾垜浠負浜嗙畝鍗曞茍娌℃湁閲婃斁鍐呭瓨錛岄偅涔堣鎬庝箞鍘婚噴鏀懼憿錛熸槸delete p涔堬紵閿欎簡錛屽簲璇ユ槸delete []p錛岃繖鏄負浜嗗憡璇夌紪璇戝櫒錛氭垜鍒犻櫎鐨勬槸涓涓暟緇勶紝VC6灝變細鏍規嵁鐩稿簲鐨凜ookie淇℃伅鍘昏繘琛岄噴鏀懼唴瀛樼殑宸ヤ綔銆?
銆銆濂戒簡錛屾垜浠洖鍒版垜浠殑涓婚錛氬爢鍜屾爤絀剁珶鏈変粈涔堝尯鍒紵
銆銆涓昏鐨勫尯鍒敱浠ヤ笅鍑犵偣錛?
銆銆1銆佺鐞嗘柟寮忎笉鍚岋紱
銆銆2銆佺┖闂村ぇ灝忎笉鍚岋紱
銆銆3銆佽兘鍚︿駭鐢熺鐗囦笉鍚岋紱
銆銆4銆佺敓闀挎柟鍚戜笉鍚岋紱
銆銆5銆佸垎閰嶆柟寮忎笉鍚岋紱
銆銆6銆佸垎閰嶆晥鐜囦笉鍚岋紱
銆銆綆$悊鏂瑰紡錛氬浜庢爤鏉ヨ錛屾槸鐢辯紪璇戝櫒鑷姩綆$悊錛屾棤闇鎴戜滑鎵嬪伐鎺у埗錛涘浜庡爢鏉ヨ錛岄噴鏀懼伐浣滅敱紼嬪簭鍛樻帶鍒訛紝瀹規槗浜х敓memory leak銆?
銆銆絀洪棿澶у皬錛氫竴鑸潵璁插湪32浣嶇郴緇熶笅錛屽爢鍐呭瓨鍙互杈懼埌4G鐨勭┖闂達紝浠庤繖涓搴︽潵鐪嬪爢鍐呭瓨鍑犱箮鏄病鏈変粈涔堥檺鍒剁殑銆備絾鏄浜庢爤鏉ヨ錛屼竴鑸兘鏄湁涓瀹氱殑絀洪棿澶у皬鐨勶紝渚嬪錛屽湪VC6涓嬮潰錛岄粯璁ょ殑鏍堢┖闂村ぇ灝忔槸1M錛堝ソ鍍忔槸錛岃涓嶆竻妤氫簡錛夈傚綋鐒訛紝鎴戜滑鍙互淇敼錛?
銆銆鎵撳紑宸ョ▼錛屼緷嬈℃搷浣滆彍鍗曞涓嬶細Project->Setting->Link錛屽湪Category 涓変腑Output錛岀劧鍚庡湪Reserve涓瀹氬爢鏍堢殑鏈澶у煎拰commit銆?
銆銆娉ㄦ剰錛歊eserve鏈灝忓間負4Byte錛沜ommit鏄繚鐣欏湪铏氭嫙鍐呭瓨鐨勯〉鏂囦歡閲岄潰錛屽畠璁劇疆鐨勮緝澶т細浣挎爤寮杈熻緝澶х殑鍊鹼紝鍙兘澧炲姞鍐呭瓨鐨勫紑閿鍜屽惎鍔ㄦ椂闂淬?
銆銆紕庣墖闂錛氬浜庡爢鏉ヨ錛岄綣佺殑new/delete鍔垮繀浼氶犳垚鍐呭瓨絀洪棿鐨勪笉榪炵畫錛屼粠鑰岄犳垚澶ч噺鐨勭鐗囷紝浣跨▼搴忔晥鐜囬檷浣庛傚浜庢爤鏉ヨ錛屽垯涓嶄細瀛樺湪榪欎釜闂錛屽洜涓烘爤鏄厛榪涘悗鍑虹殑闃熷垪錛屼粬浠槸濡傛鐨勪竴涓瀵瑰簲錛屼互鑷充簬姘歌繙閮戒笉鍙兘鏈変竴涓唴瀛樺潡浠庢爤涓棿寮瑰嚭錛屽湪瀹冨脊鍑轟箣鍓嶏紝鍦ㄥ畠涓婇潰鐨勫悗榪涚殑鏍堝唴瀹瑰凡緇忚寮瑰嚭錛岃緇嗙殑鍙互鍙傝冩暟鎹粨鏋勶紝榪欓噷鎴戜滑灝變笉鍐嶄竴涓璁ㄨ浜嗐?
銆銆鐢熼暱鏂瑰悜錛?font style="BACKGROUND-COLOR: #33cccc">瀵逛簬鍫嗘潵璁詫紝鐢熼暱鏂瑰悜鏄悜涓婄殑錛屼篃灝辨槸鍚戠潃鍐呭瓨鍦板潃澧炲姞鐨勬柟鍚戯紱瀵逛簬鏍堟潵璁詫紝瀹冪殑鐢熼暱鏂瑰悜鏄悜涓嬬殑錛屾槸鍚戠潃鍐呭瓨鍦板潃鍑忓皬鐨勬柟鍚戝闀褲?/font>
銆銆鍒嗛厤鏂瑰紡錛氬爢閮芥槸鍔ㄦ佸垎閰嶇殑錛屾病鏈夐潤鎬佸垎閰嶇殑鍫嗐傛爤鏈?縐嶅垎閰嶆柟寮忥細闈欐佸垎閰嶅拰鍔ㄦ佸垎閰嶃傞潤鎬佸垎閰嶆槸緙栬瘧鍣ㄥ畬鎴愮殑錛屾瘮濡傚眬閮ㄥ彉閲忕殑鍒嗛厤銆傚姩鎬佸垎閰嶇敱alloca鍑芥暟榪涜鍒嗛厤錛屼絾鏄爤鐨勫姩鎬佸垎閰嶅拰鍫嗘槸涓嶅悓鐨勶紝瀹冪殑鍔ㄦ佸垎閰嶆槸鐢辯紪璇戝櫒榪涜閲婃斁錛屼笉闇瑕佹垜浠墜宸ュ疄鐜般?
銆銆鍒嗛厤鏁堢巼錛氭爤鏄満鍣ㄧ郴緇熸彁渚涚殑鏁版嵁緇撴瀯錛岃綆楁満浼氬湪搴曞眰瀵規爤鎻愪緵鏀寔錛氬垎閰嶄笓闂ㄧ殑瀵勫瓨鍣ㄥ瓨鏀炬爤鐨勫湴鍧錛屽帇鏍堝嚭鏍堥兘鏈変笓闂ㄧ殑鎸囦護鎵ц錛岃繖灝卞喅瀹氫簡鏍堢殑鏁堢巼姣旇緝楂?鎴戠殑娉ㄩ噴:鍏充簬EBP瀵勫瓨鍣ㄨ鍙傝冨彟涓綃囨枃绔?/font>)銆?/span>
鍫嗗垯鏄疌/C++鍑芥暟搴撴彁渚涚殑錛屽畠鐨勬満鍒舵槸寰堝鏉傜殑錛屼緥濡備負浜嗗垎閰嶄竴鍧楀唴瀛橈紝搴撳嚱鏁頒細鎸夌収涓瀹氱殑綆楁硶錛堝叿浣撶殑綆楁硶鍙互鍙傝冩暟鎹粨鏋?鎿嶄綔緋葷粺錛夊湪鍫嗗唴瀛樹腑鎼滅儲鍙敤鐨勮凍澶熷ぇ灝忕殑絀洪棿錛屽鏋滄病鏈夎凍澶熷ぇ灝忕殑絀洪棿錛堝彲鑳芥槸鐢變簬鍐呭瓨紕庣墖澶錛夛紝灝辨湁鍙兘璋冪敤緋葷粺鍔熻兘鍘誨鍔犵▼搴忔暟鎹鐨勫唴瀛樼┖闂達紝榪欐牱灝辨湁鏈轟細鍒嗗埌瓚沖澶у皬鐨勫唴瀛橈紝鐒跺悗榪涜榪斿洖銆傛樉鐒訛紝鍫嗙殑鏁堢巼姣旀爤瑕佷綆寰楀銆?br>
銆銆浠庤繖閲屾垜浠彲浠ョ湅鍒幫紝鍫嗗拰鏍堢浉姣旓紝鐢變簬澶ч噺new/delete鐨勪嬌鐢紝瀹規槗閫犳垚澶ч噺鐨勫唴瀛樼鐗囷紱鐢變簬娌℃湁涓撻棬鐨勭郴緇熸敮鎸侊紝鏁堢巼寰堜綆錛涚敱浜庡彲鑳藉紩鍙戠敤鎴鋒佸拰鏍稿績鎬佺殑鍒囨崲錛屽唴瀛樼殑鐢寵錛屼唬浠峰彉寰楁洿鍔犳槀璐點傛墍浠ユ爤鍦ㄧ▼搴忎腑鏄簲鐢ㄦ渶騫挎硾鐨勶紝灝辯畻鏄嚱鏁扮殑璋冪敤涔熷埄鐢ㄦ爤鍘誨畬鎴愶紝鍑芥暟璋冪敤榪囩▼涓殑鍙傛暟錛岃繑鍥炲湴鍧錛孍BP鍜屽眬閮ㄥ彉閲忛兘閲囩敤鏍堢殑鏂瑰紡瀛樻斁銆傛墍浠ワ紝鎴戜滑鎺ㄨ崘澶у灝介噺鐢ㄦ爤錛岃屼笉鏄敤鍫嗐?
銆銆铏界劧鏍堟湁濡傛浼楀鐨勫ソ澶勶紝浣嗘槸鐢變簬鍜屽爢鐩告瘮涓嶆槸閭d箞鐏墊椿錛屾湁鏃跺欏垎閰嶅ぇ閲忕殑鍐呭瓨絀洪棿錛岃繕鏄敤鍫嗗ソ涓浜涖?
銆銆鏃犺鏄爢榪樻槸鏍堬紝閮借闃叉瓚婄晫鐜拌薄鐨勫彂鐢燂紙闄ら潪浣犳槸鏁呮剰浣垮叾瓚婄晫錛夛紝鍥犱負瓚婄晫鐨勭粨鏋滆涔堟槸紼嬪簭宕╂簝錛岃涔堟槸鎽ф瘉紼嬪簭鐨勫爢銆佹爤緇撴瀯錛屼駭鐢熸剰鎯充笉鍒扮殑緇撴灉,灝辯畻鏄湪浣犵殑紼嬪簭榪愯榪囩▼涓紝娌℃湁鍙戠敓涓婇潰鐨勯棶棰橈紝浣犺繕鏄灝忓績錛岃涓嶅畾浠涔堟椂鍊欏氨宕╂帀錛岄偅鏃跺檇ebug鍙槸鐩稿綋鍥伴毦鐨勶細錛?nbsp;
FILE * fopen(char *filename, char *openmode) 鎵撳紑鏂囦歡
int fclose(FILE * fp) 鍏抽棴鏂囦歡
int fseek(FILE *fp, long offset, int base) 鏂囦歡瀹氫綅
void rewind(FILE *fp) 鏂囦歡鎸囬拡鍥炲埌鏂囦歡澶?/p>
long ftell(FILE *fp) 榪斿洖fp鎵鎸囨枃浠惰鍐欎綅緗?/p>
int fgetc(FILE *fp) 浠巉p鎵鎸囨枃浠惰1涓猚har
char * fgets(char *buffer, int n, FILE *fp) 浠巉p鎵鎸囨枃浠惰n涓猚har
int fputc(char ch, FILE *fp) 鍚慺p鎵鎸囨枃浠跺啓1涓猚har
int fputs(char * str, FILE *fp) 鍚慺p鎵鎸囨枃浠跺啓n涓猚har
int fread(char *buffer, int size, int n, FILE *fp) 浠巉p鎵鎸囨枃浠惰n涓猻ize鍒癰uffer
int fwrite(char *str, int size , int n, FILE *fp) 鎶妔tr鎸囧悜鐨刵*size char鍐欏埌鏂囦歡
int fscanf(FILE *fp, char *format, args......) 浠巉p鎵鎸囨枃浠舵寜format鏍煎紡灝嗘暟鎹鍒癮rgs鎵鎸囩殑鍐呭瓨鍗曞厓鍐?
int fprintf(FILE *fp, char *format, args......) 鎶奱rgs鐨勫兼寜format鎵鎸囩殑鏍煎紡鍐欏埌fp鎵鎸囩殑鏂囦歡涓?/p>
int feof(FILE *fp) 媯鏌ユ枃浠舵槸鍚︾粨鏉? 緇撴潫灝卞弽鍥為潪0鍊?/p>
int ferror(FILE *fp) 媯鏌ユ枃浠舵槸鍚﹀嚭閿?娌℃湁鍑洪敊鏃跺弽鍥?
void clearerr(FILE *fp) 浣縡p鎵鎸囩殑鏂囦歡鐨勯敊璇?鏍囧織鍜屾枃浠剁粨鏉熺瓑緗?br>


/**//*
鍑芥暟璇存槑:
1)銆乻rcFile涓烘簮鏂囦歡錛宭oc涓鴻媯鏌ョ殑浣嶇疆錛宒atabit涓鴻媯鏌ョ殑鏁版嵁浣嶏紝data涓洪渶瑕佹帓闄ょ殑鏁版嵁浣?br> 5
2)銆佹垚鍔熻繑鍥?錛屽け璐ヨ繑鍥?
*/
int updateContent(const char *srcFile,const int loc,const int databit, const int data)

{
FILE *fsrc=NULL,*ftmp=NULL;
char BUFF[256];
char tempfile[]="tempfileXXXXXX";
char *pbitdata=NULL;
const char *delim=",";
assert((NULL!=srcFile) && (loc>0) && (databit>=1 && databit<=2) && (data>=0 && data<=9));
if (NULL==(ftmp=fopen(mktemp(tempfile),"w+")))
{//濡傛灉鎵撳紑涓存椂鏂囦歡澶辮觸
printf("<%s:%d>open(or create) file [%s] failed!\nERROR!!! %s\n",
__FILE__,__LINE__,tempfile,strerror(errno));
return 0;
}
if (NULL==(fsrc=fopen(srcFile,"r")))
{//濡傛灉鎵撳紑婧愭枃浠跺け璐?/span>
printf("<%s:%d>open file [%s] failed!\nERROR!!! %s\n",
__FILE__,__LINE__,srcFile,strerror(errno));
fclose(ftmp);
remove(tempfile);
return 0;
}
while (!feof(fsrc))
{
char *tmpStr=NULL;
int curNum=1;
memset(BUFF,0,sizeof(BUFF));
if (NULL==fgets(BUFF,sizeof(BUFF),fsrc))
continue;
tmpStr=strdup(BUFF);
pbitdata=strtok(BUFF,delim);
while (NULL!=pbitdata)
{//鍒嗗壊瀛楃涓?/span>
if (curNum++==loc)
{//宸叉壘鍒版寚瀹氫綅緗殑鏁版嵁
//濡傛灉涓嶇鍚堣姹?鍒欎繚鐣?鍚﹀垯鍒犻櫎
if (data!=*(pbitdata+databit-1)-48)
fputs(tmpStr,ftmp);
free(tmpStr);
tmpStr=NULL;
break;
}
pbitdata=strtok(NULL,delim);
}
//濡傛灉娌℃湁鎵懼埌鎸囧畾鐨勪綅緗?/span>
if (NULL!=tmpStr)
{
fputs(tmpStr,ftmp);
free(tmpStr);
tmpStr=NULL;
}
}
if (NULL==(fsrc=freopen(srcFile,"w",fsrc)))
{//閲嶆柊鎵撳紑婧愭枃浠跺け璐?/span>
printf("<%s:%d>reopen file [%s] failed!\nERROR!!! %s\n",
__FILE__,__LINE__,srcFile,strerror(errno));
return 0;
}
rewind(ftmp);
while (!feof(ftmp))
{//鏇存柊鑷沖師鏉ョ殑鏂囦歡
memset(BUFF,0,sizeof(BUFF));
if (NULL==fgets(BUFF,sizeof(BUFF),ftmp))
continue;
fputs(BUFF,fsrc);
}
fclose(fsrc);
fclose(ftmp);
remove(tempfile);
return 1;
}
