• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 62,  comments - 19,  trackbacks - 0


            void ? dialog5::OnRclickList1(NMHDR* ? pNMHDR, ? LRESULT* ? pResult) ? ?
            ? { ?
            ? // ? TODO: ? Add ? your ? control ? notification ? handler ? code ? here ?
            ? CMenu ? menu1,*menu2; ?
            ? CPoint ? point1; ?
            ? menu1.LoadMenu(IDR_MENU1); ?
            ? menu2=menu1.GetSubMenu(0); ?
            ? ::GetCursorPos(&point1); ?
            ? menu2->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, ?
            ? point1.x,point1.y,this); ?
            ? ?
            ? *pResult ? = ? 0; ?
            ? }??

            posted @ 2006-11-29 10:48 喬棟 閱讀(242) | 評(píng)論 (0)編輯 收藏

            偶然發(fā)現(xiàn)的一個(gè)有用的windows api SetROP2(int nDrawMode),現(xiàn)在將我對(duì)該api的使用的心得歸納如下:

            該函數(shù)的主要的作用是根據(jù)nDrawMode設(shè)置的方式重新設(shè)定繪圖的方式,下面就不同的nDrawMode值具體解釋繪圖模式是如何改變的。

            首先就nDrawMode的取值有以下的情況:

          1. R2_BLACK???Pixel is always black.?? //所有繪制出來(lái)的像素為黑色
          2. R2_WHITE???Pixel is always white.??? //所有繪制出來(lái)的像素為白色
          3. R2_NOP???Pixel remains unchanged.?? //任何繪制將不改變當(dāng)前的狀態(tài)
          4. R2_NOT???Pixel is the inverse of the screen color.?//當(dāng)前繪制的像素值設(shè)為屏幕像素值的反,這樣可以覆蓋掉上次的繪圖,(自動(dòng)擦除上次繪制的圖形)
          5. R2_COPYPEN???Pixel is the pen color.??? //使用當(dāng)前的畫筆的顏色
          6. R2_NOTCOPYPEN???Pixel is the inverse of the pen color.? //當(dāng)前畫筆的反色
          7. /////////////////////////////////////////////////////////////////////////////////example/////////////////////////////////////////////////////////////////////////
            ??ClientDC.SetROP2(R2_NOT);
            ??ClientDC.MoveTo(m_PointOrigin);
            ??ClientDC.LineTo(m_PointOld);
            ??ClientDC.MoveTo(m_PointOrigin);
            ??ClientDC.LineTo(point);
            ??m_PointOld = point;
            ??CView::OnMouseMove(nFlags, point);
            ///////////////////////////////////////////////////////////////////////////////////////end/////////////////////////////////////////////////////////////////////////

          8. 總之,上述api的一個(gè)作用是在需要改變繪圖的模式時(shí),不需要重新設(shè)置畫筆,只需要設(shè)置不同的繪圖的模式即可達(dá)到相應(yīng)的目的。


          9. posted @ 2006-11-20 17:27 喬棟 閱讀(1784) | 評(píng)論 (0)編輯 收藏

            #include<stdio.h>

            struct a
            {
            ?int b;
            };
            struct b
            {
            ??? int a;
            };
            void main()
            {
            ?a A;
            ?A.b = NULL;
            ?A.b = 1;
            ?
            ?b a;
            ?a.a = 3;
            }

            在C的環(huán)境下,會(huì)報(bào)錯(cuò),在C++的情況,這樣的操作就是允許的。
            在C++的編譯器中,允許將結(jié)構(gòu)體名作為一個(gè)變量名來(lái)對(duì)待。

            posted @ 2006-11-20 10:54 喬棟 閱讀(232) | 評(píng)論 (0)編輯 收藏
            什么是野指針?  
            ??????一個(gè)母親有兩個(gè)小孩(兩個(gè)指針),一個(gè)在廚房,一個(gè)在臥室,(屬于不同的代碼塊,其生存期不同)母親讓在廚房的小孩帶一塊蛋糕(指針指向的對(duì)象)給在臥室的小孩,這樣在臥室的孩子才肯寫作業(yè)。但這個(gè)在廚房的小孩比較淘氣,他在走出廚房時(shí)自己將蛋糕吃了,沒能帶出來(lái)。而在臥室的沒有吃到蛋糕,所以不肯完成他的作業(yè)。結(jié)果母親卻不知道臥室的孩子沒有吃到蛋糕,還以為作業(yè)完了。結(jié)果第二天她就被老師召喚到辦公室了。事情麻煩了。  這樣,那個(gè)在臥室的孩子就是野指針了,因?yàn)樗麤]有得到應(yīng)得的蛋糕,不能完成母親交給他的作業(yè)。
            ?
            ??????野指針是指那些你已經(jīng)釋放掉的內(nèi)存指針。當(dāng)你調(diào)用free(p)時(shí),你真正清楚這個(gè)動(dòng)作背后的內(nèi)容嗎?你會(huì)說(shuō)p指向的內(nèi)存被釋放了。沒錯(cuò),p本身有變化嗎?答案是p本身沒有變化。它指向的內(nèi)存仍然是有效的,你繼續(xù)讀寫p指向的內(nèi)存,沒有人能攔得住你。??
            ??????釋放掉的內(nèi)存會(huì)被內(nèi)存管理器重新分配,此時(shí),野指針指向的內(nèi)存已經(jīng)被賦予新的意義。對(duì)野指針指向內(nèi)存的訪問(wèn),無(wú)論是有意還是無(wú)意的,都為此會(huì)付出巨大代價(jià),因?yàn)樗斐傻暮蠊缤浇缭L問(wèn)一樣是不可預(yù)料的。?
            ??????釋放內(nèi)存后立即把對(duì)應(yīng)指針置為空值,這是避免野指針常用的方法。這個(gè)方法簡(jiǎn)單有效,只是要注意,當(dāng)然指針是從函數(shù)外層傳入的時(shí),在函數(shù)內(nèi)把指針置為空值,對(duì)外層的指針沒有影響。比如,你在析構(gòu)函數(shù)里把this指針置為空值,沒有任何效果,這時(shí)應(yīng)該在函數(shù)外層把指針置為空值。




            posted @ 2006-11-13 09:48 喬棟 閱讀(339) | 評(píng)論 (0)編輯 收藏
            #include <stdio.h>
            void main()
            {
            ? ? ? ? int i;
            ? ? ? ?
            ? ? ? ? if(i = -1)
            ? ? ? ? ? ? ? ? printf("True!\n");
            ? ? ? ? else
            ? ? ? ? ? ? ? ? printf("False!\n");
            ? ? ? ?
            ? ? ? ? if(i = 0)
            ? ? ? ? ? ? ? ? printf("True!\n");
            ? ? ? ? else
            ? ? ? ? ? ? ? ? printf("False!\n");
            }
            結(jié)果是什么?為什么呢?
            posted @ 2006-11-10 14:54 喬棟 閱讀(223) | 評(píng)論 (0)編輯 收藏
            解釋auto_ptr



            #include <iostream>
            #include <memory>
            using namespace std;

            int main()
            {
            ? ? ? ? auto_ptr<int> pi ( new int(1024) );
            ? ? ? ? cout << *pi << endl;
            ? ? ? ? return 0;
            }
            回答:

            auto_ptr是C++標(biāo)準(zhǔn)庫(kù)提供的類模板,它可以幫助程序員自動(dòng)管理用new表達(dá)式動(dòng)態(tài)分配的單個(gè)對(duì)象。當(dāng)auto_ptr對(duì)象的生命期結(jié)束時(shí),動(dòng)態(tài)分配的對(duì)象被自動(dòng)釋放。


















            posted @ 2006-11-10 14:06 喬棟 閱讀(300) | 評(píng)論 (0)編輯 收藏
            C++之內(nèi)存分配


            ??? 很多人都覺得學(xué)習(xí)C++是特別困難的事情。C++學(xué)習(xí)是比較復(fù)雜的:它的內(nèi)存分配、指針、以及面向?qū)ο笏枷氲膶?shí)現(xiàn)等等,確實(shí)需要一定的技術(shù)積累。我們將以專題的形式,為大家逐一剖析c++的技術(shù)重點(diǎn)和難點(diǎn)。

            ??? 本專題討論的就是內(nèi)存分配。學(xué)習(xí)c++如果不了解內(nèi)存分配是一件非常可悲的事情。而且,可以這樣講,一個(gè)C++程序員無(wú)法掌握內(nèi)存、無(wú)法了解內(nèi)存,是不能夠成為一個(gè)合格的C++程序員的。

            ??? 一、內(nèi)存基本構(gòu)成
            ??? 可編程內(nèi)存在基本上分為這樣的幾大部分:靜態(tài)存儲(chǔ)區(qū)、堆區(qū)和棧區(qū)。他們的功能不同,對(duì)他們使用方式也就不同。
            ??? 靜態(tài)存儲(chǔ)區(qū):內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。它主要存放靜態(tài)數(shù)據(jù)、全局?jǐn)?shù)據(jù)和常量。
            ??? 棧區(qū):在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
            ??? 堆區(qū):亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意大小的內(nèi)存,程序員自己負(fù)責(zé)在適當(dāng)?shù)臅r(shí)候用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期可以由我們決定,如果我們不釋放內(nèi)存,程序?qū)⒃谧詈蟛裴尫诺魟?dòng)態(tài)內(nèi)存。 但是,良好的編程習(xí)慣是:如果某動(dòng)態(tài)內(nèi)存不再使用,需要將其釋放掉,否則,我們認(rèn)為發(fā)生了內(nèi)存泄漏現(xiàn)象。

            ??? 二、三者之間的區(qū)別
            ??? 我們通過(guò)代碼段來(lái)看看對(duì)這樣的三部分內(nèi)存需要怎樣的操作和不同,以及應(yīng)該注意怎樣的地方。
            ??? 例一:靜態(tài)存儲(chǔ)區(qū)與棧區(qū)

            char* p = “Hello World1”;

            char a[] = “Hello World2”;

            p[2] = ‘A’;

            a[2] = ‘A’;

            ?

            char* p1 = “Hello World1;”


            ??? 這個(gè)程序是有錯(cuò)誤的,錯(cuò)誤發(fā)生在p[2] = ‘A’這行代碼處,為什么呢,是變量p和變量數(shù)組a都存在于棧區(qū)的(任何臨時(shí)變量都是處于棧區(qū)的,包括在main()函數(shù)中定義的變量)。但是,數(shù)據(jù)“Hello World1”和數(shù)據(jù)“Hello World2”是存儲(chǔ)于不同的區(qū)域的。

            ??? 因?yàn)閿?shù)據(jù)“Hello World2”存在于數(shù)組中,所以,此數(shù)據(jù)存儲(chǔ)于棧區(qū),對(duì)它修改是沒有任何問(wèn)題的。因?yàn)橹羔樧兞縫僅僅能夠存儲(chǔ)某個(gè)存儲(chǔ)空間的地址,數(shù)據(jù)“Hello World1”為字符串常量,所以存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。雖然通過(guò)p[2]可以訪問(wèn)到靜態(tài)存儲(chǔ)區(qū)中的第三個(gè)數(shù)據(jù)單元,即字符‘l’所在的存儲(chǔ)的單元。但是因?yàn)閿?shù)據(jù)“Hello World1”為字符串常量,不可以改變,所以在程序運(yùn)行時(shí),會(huì)報(bào)告內(nèi)存錯(cuò)誤。并且,如果此時(shí)對(duì)p和p1輸出的時(shí)候會(huì)發(fā)現(xiàn)p和p1里面保存的地址是完全相同的。換句話說(shuō),在數(shù)據(jù)區(qū)只保留一份相同的數(shù)據(jù)(見圖1-1)。

            ??? 例二:棧區(qū)與堆區(qū)

            char*? f1()

            {

            ?? char* p = NULL;

            ?? char a;

            ?? p = &a;

            ?? return p;

            }

            char* f2()

            {

            ?? char* p = NULL:

            ?? p =(char*)? new? char[4];

            ?? return p;

            }


            ??? 這兩個(gè)函數(shù)都是將某個(gè)存儲(chǔ)空間的地址返回,二者有何區(qū)別呢?f1()函數(shù)雖然返回的是一個(gè)存儲(chǔ)空間,但是此空間為臨時(shí)空間。也就是說(shuō),此空間只有短暫的生命周期,它的生命周期在函數(shù)f1()調(diào)用結(jié)束時(shí),也就失去了它的生命價(jià)值,即:此空間被釋放掉。所以,當(dāng)調(diào)用f1()函數(shù)時(shí),如果程序中有下面的語(yǔ)句:

            ?

            char* p ;

            p = f1();

            *p = ‘a(chǎn)’;


            ??? 此時(shí),編譯并不會(huì)報(bào)告錯(cuò)誤,但是在程序運(yùn)行時(shí),會(huì)發(fā)生異常錯(cuò)誤。因?yàn)椋銓?duì)不應(yīng)該操作的內(nèi)存(即,已經(jīng)釋放掉的存儲(chǔ)空間)進(jìn)行了操作。但是,相比之下,f2()函數(shù)不會(huì)有任何問(wèn)題。因?yàn)椋琻ew這個(gè)命令是在堆中申請(qǐng)存儲(chǔ)空間,一旦申請(qǐng)成功,除非你將其delete或者程序終結(jié),這塊內(nèi)存將一直存在。也可以這樣理解,堆內(nèi)存是共享單元,能夠被多個(gè)函數(shù)共同訪問(wèn)。如果你需要有多個(gè)數(shù)據(jù)返回卻苦無(wú)辦法,堆內(nèi)存將是一個(gè)很好的選擇。但是一定要避免下面的事情發(fā)生:

            ?

            void f()

            {

            ??

            ?? char * p;

            ?? p = (char*)new char[100];

            ??

            }


            ??? 這個(gè)程序做了一件很無(wú)意義并且會(huì)帶來(lái)很大危害的事情。因?yàn)椋m然申請(qǐng)了堆內(nèi)存,p保存了堆內(nèi)存的首地址。但是,此變量是臨時(shí)變量,當(dāng)函數(shù)調(diào)用結(jié)束時(shí)p變量消失。也就是說(shuō),再也沒有變量存儲(chǔ)這塊堆內(nèi)存的首地址,我們將永遠(yuǎn)無(wú)法再使用那塊堆內(nèi)存了。但是,這塊堆內(nèi)存卻一直標(biāo)識(shí)被你所使用(因?yàn)闆]有到程序結(jié)束,你也沒有將其delete,所以這塊堆內(nèi)存一直被標(biāo)識(shí)擁有者是當(dāng)前您的程序),進(jìn)而其他進(jìn)程或程序無(wú)法使用。我們將這種不道德的“流氓行為”(我們不用,卻也不讓別人使用)稱為內(nèi)存泄漏。這是我們C++程序員的大忌!!請(qǐng)大家一定要避免這件事情的發(fā)生。

            ??? 總之,對(duì)于堆區(qū)、棧區(qū)和靜態(tài)存儲(chǔ)區(qū)它們之間最大的不同在于,棧的生命周期很短暫。但是堆區(qū)和靜態(tài)存儲(chǔ)區(qū)的生命周期相當(dāng)于與程序的生命同時(shí)存在(如果您不在程序運(yùn)行中間將堆內(nèi)存delete的話),我們將這種變量或數(shù)據(jù)成為全局變量或數(shù)據(jù)。但是,對(duì)于堆區(qū)的內(nèi)存空間使用更加靈活,因?yàn)樗试S你在不需要它的時(shí)候,隨時(shí)將它釋放掉,而靜態(tài)存儲(chǔ)區(qū)將一直存在于程序的整個(gè)生命周期中。

            posted @ 2006-11-09 17:22 喬棟 閱讀(338) | 評(píng)論 (1)編輯 收藏
            c++中delete前,判斷指針是否為0,有必要嗎?

            有必要判斷pi = 0嗎?

            if ( pi != 0 )
            ? ? delete pi;
            解答:

            c++中,如果指針等于0的話,c++不會(huì)調(diào)用delete的。(因?yàn)閏++中隱式的進(jìn)行了判等)

            如果顯示的判等,那么實(shí)際上這個(gè)測(cè)試會(huì)被執(zhí)行2次。


            靜態(tài)與動(dòng)態(tài)內(nèi)存分配的兩個(gè)主要區(qū)別:

            1. 靜態(tài)對(duì)象是有名字的變量,直接對(duì)其進(jìn)行操作;動(dòng)態(tài)對(duì)象是沒有名字的變量,通過(guò)指針間接地對(duì)它們進(jìn)行操作。

            int *pia = new int (1024)
            分配了一個(gè)沒有名字int類型的對(duì)象,對(duì)象初始值是1024。然后,表達(dá)式返回對(duì)象在內(nèi)存中的地址。


            2. 靜態(tài)對(duì)象的分配和釋放由編譯器自動(dòng)處理。動(dòng)態(tài)對(duì)象的分配和釋放必須由程序員自己顯式管理。

















            posted @ 2006-11-09 16:53 喬棟 閱讀(1977) | 評(píng)論 (0)編輯 收藏

            試題 4

            void GetMemory( char *p )
            {
            ? ?p = (char *) malloc( 100 );
            }

            void Test( void )
            {
            ? ?char *str = NULL;

            ? ?GetMemory( str );
            ? ?strcpy( str, "hello world" );
            ? ?printf( str );
            }
            試題 5

            char *GetMemory( void )
            {? ?
            ? ???char p[] = "hello world";? ?? ?

            ? ???return p;??
            }
            void Test( void )
            {? ?
            ? ???char *str = NULL;??

            ? ???str = GetMemory();? ?
            ? ???printf( str );? ?
            }

            試題 6
            void GetMemory( char **p, int num )
            {
            ? ???*p = (char *) malloc( num );
            }
            void Test( void )
            {
            ? ???char *str = NULL;

            ? ???GetMemory( &str, 100 );
            ? ???strcpy( str, "hello" );
            ? ???printf( str );
            }

            試題 7

            void Test( void )
            {
            ? ???char *str = (char *) malloc( 100 );

            ? ???strcpy( str, "hello" );
            ? ???free( str );

            ? ???...??//
            省略的其它語(yǔ)句

            }

            解答:

            試題 4 傳入中 GetMemory( char *p ) 函數(shù)的形參為字符串指針,在函數(shù)內(nèi)部修改形參并不能真正的改變傳入形參的值,執(zhí)行完

            char *str = NULL;

            GetMemory( str );

            后的 str 仍然為 NULL

            試題 5

            ? ???char p[] = "hello world";? ?

            ? ???return p;??

            p[] 數(shù)組為函數(shù)內(nèi)的局部自動(dòng)變量,在函數(shù)返回后,內(nèi)存已經(jīng)被釋放。這是許多程序員常犯的錯(cuò)誤,其根源在于不理解變量的生存期。
            試題 6 GetMemory 避免了試題 4 的問(wèn)題,傳入 GetMemory 的參數(shù)為字符串指針的指針,但是在 GetMemory 中執(zhí)行申請(qǐng)內(nèi)存及賦值語(yǔ)句

            p = (char *) malloc( num );

            后未判斷內(nèi)存是否申請(qǐng)成功,應(yīng)加上:

            if ( p == NULL )
            {

            ? ?...//
            進(jìn)行申請(qǐng)內(nèi)存失敗處理
              }

            試題 7 存在與試題 6 同樣的問(wèn)題,在執(zhí)行

            char *str = (char *) malloc(100);

            后未進(jìn)行內(nèi)存是否申請(qǐng)成功的判斷;另外,在 free(str) 后未置 str 為空,導(dǎo)致可能變成一個(gè) 指針,應(yīng)加上:

            str = NULL;

            試題 6 Test 函數(shù)中也未對(duì) malloc 的內(nèi)存進(jìn)行釋放。

            剖析:

            試題 4 7 考查面試者對(duì)內(nèi)存操作的理解程度,基本功扎實(shí)的面試者一般都能正確的回答其中 50~60 的錯(cuò)誤。但是要完全解答正確,卻也絕非易事。

            對(duì)內(nèi)存操作的考查主要集中在:

            1 )指針的理解;

            2 )變量的生存期及作用范圍;

            3 )良好的動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放習(xí)慣。

            在看看下面的一段程序有什么錯(cuò)誤:

            swap( int* p1,int* p2 )
            {
            ? ???int *p;

            ? ???*p = *p1;
            ? ???*p1 = *p2;
            ? ???*p2 = *p;
            }

            swap 函數(shù)中, p 是一個(gè) 指針,有可能指向系統(tǒng)區(qū),導(dǎo)致程序運(yùn)行的崩潰。在 VC++ DEBUG 運(yùn)行時(shí)提示錯(cuò)誤 “Access Violation” 。該程序應(yīng)該改為:

            swap( int* p1,int* p2 )
            {
            ? ???int p;

            ? ???p = *p1;
            ? ???*p1 = *p2;
            ? ???*p2 = p;
            }















            posted @ 2006-11-09 15:47 喬棟 閱讀(384) | 評(píng)論 (0)編輯 收藏

            試題1:

            void test1()
            {
            ? ?char string[10];
            ? ?char* str1 = "0123456789";

            ? ???strcpy( string, str1 );
            }

            試題2:

            void test2()
            {
            ? ?char string[10], str1[10];
            ? ???int i;

            ? ???for(i=0; i<10; i++)
            ? ???{
            ? ?? ???str1
            = 'a';

            ? ???}

            ? ???strcpy( string, str1 );
            }

            試題3:

            void test3(char* str1)
            {
            ? ?char string[10];

            ? ?if( strlen( str1 ) <= 10 )
            ? ???{
            ? ?? ?? ?? ?strcpy( string, str1 );
            ? ???}
            }

            解答:

            試題1字符串str1需要11個(gè)字節(jié)才能存放下(包括末尾的’\0’),而string只有10個(gè)字節(jié)的空間,strcpy會(huì)導(dǎo)致數(shù)組越界;

            對(duì)試題2,如果面試者指出字符數(shù)組str1不能在數(shù)組內(nèi)結(jié)束可以給3分;如果面試者指出strcpy(string, str1)調(diào)用使得從str1內(nèi)存起復(fù)制到string內(nèi)存起所復(fù)制的字節(jié)數(shù)具有不確定性可以給7分,在此基礎(chǔ)上指出庫(kù)函數(shù)strcpy工作方式的給10分;

            對(duì)試題3,if(strlen(str1) <= 10)應(yīng)改為if(strlen(str1) < 10),因?yàn)閟trlen的結(jié)果未統(tǒng)計(jì)’\0’所占用的1個(gè)字節(jié)。

            剖析:

            考查對(duì)基本功的掌握:

            (1)字符串以’\0’結(jié)尾;

            (2)對(duì)數(shù)組越界把握的敏感度;

            (3)庫(kù)函數(shù)strcpy的工作方式,如果編寫一個(gè)標(biāo)準(zhǔn)strcpy函數(shù)的總分值為10,下面給出幾個(gè)不同得分的答案:

            2分

            void strcpy( char *strDest, char *strSrc )
            {
              while( (*strDest++ = * strSrc++) != ‘\0’ );
            }

            4分
            void strcpy( char *strDest, const char *strSrc )

            //將源字符串加const,表明其為輸入?yún)?shù),加2分
            {
              while( (*strDest++ = * strSrc++) != ‘\0’ );
            }
            7分
            void strcpy(char *strDest, const char *strSrc)??
            {
            //對(duì)源地址和目的地址加非0斷言,加3分
             assert( (strDest != NULL) && (strSrc != NULL) );

             while( (*strDest++ = * strSrc++)??!=??‘\0’ );

            }
            10分

            //為了實(shí)現(xiàn)鏈?zhǔn)讲僮鳎瑢⒛康牡刂贩祷兀?分!
            char * strcpy( char *strDest, const char *strSrc )??
            {
             assert( (strDest != NULL) && (strSrc != NULL) );
            char *address = strDest;??

             while( (*strDest++ = * strSrc++) != ‘\0’ );

            ??return address;
            }

            類似的我們可以寫出一個(gè)10分的
            strlen函數(shù)
            int strlen( const char *str )? ? //輸入?yún)?shù)const
            {
            ? ???assert( strt != NULL );? ? //斷言字符串地址非0
            ? ???int len;

            ? ???while( (*str++) != '\0' )
            ? ???{??
            ? ?? ?? ?? ?len++;
            ? ???}

            ? ???return len;

            }

            posted @ 2006-11-09 14:48 喬棟 閱讀(2987) | 評(píng)論 (3)編輯 收藏
            僅列出標(biāo)題
            共7頁(yè): 1 2 3 4 5 6 7 
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜


            My blog is worth $0.00.
            How much is your blog worth?

            人妻无码中文久久久久专区| 亚洲另类欧美综合久久图片区| 欧美成a人片免费看久久| 无码久久精品国产亚洲Av影片| 久久久无码精品亚洲日韩京东传媒| 99精品久久精品一区二区| 久久久久久国产精品免费无码| 色综合色天天久久婷婷基地| 成人精品一区二区久久久| 婷婷国产天堂久久综合五月| 久久精品九九亚洲精品| 日韩精品无码久久一区二区三| 久久99精品久久久久久久不卡 | 久久天天躁狠狠躁夜夜不卡| 国产精品久久久久9999高清| 久久99这里只有精品国产| 国产精品久久久久国产A级| 亚洲国产精品嫩草影院久久| 欧美噜噜久久久XXX| 一本大道久久a久久精品综合| 久久精品一区二区影院| 91精品国产乱码久久久久久 | 久久国产高清一区二区三区| 亚洲综合精品香蕉久久网| 开心久久婷婷综合中文字幕| 久久国产精品-国产精品| 久久青青草原精品国产| 无码人妻精品一区二区三区久久久 | 久久青青草原精品国产不卡| 久久一区二区免费播放| 久久久久久久久久久久中文字幕| 久久久精品人妻无码专区不卡| 国产精品久久久久久福利漫画 | 久久久九九有精品国产| 久久亚洲AV成人无码电影| 狠狠色丁香婷婷久久综合| 欧美精品九九99久久在观看| 伊人伊成久久人综合网777| 色天使久久综合网天天| 久久人人爽人人人人片av| 久久婷婷五月综合国产尤物app|