GetBuffer 函式的使用

2021-07-10 14:10:38 字數 1309 閱讀 9525

如果你需要修改cstring中的內容,它有乙個特殊的方法可以使用,那就是getbuffer,它的作用是返回乙個可寫的緩衝指標。

如果你打算修改字元或者截短字串,你完全可以這樣做:   

cstring   s(_t("file.ext"));   

lptstr   p   =   s.getbuffer();   

lptstr   dot   =   strchr(p,  '' . '');  

if(p   !=   null)   

*p   =   _t(''\0'');   

s.releasebuffer();   

這是 getbuffer   的第一種用法,也是最簡單的一種,不用給它傳遞引數,它使用預設值 0,意思是:「給我這個字串的指標,我保證不加長它」。

當你呼叫 releasebuffer   時,字串的實際長度會被重新計算,然後存入 cstring 物件中。   

必須強調一點,在 getbuffer  和  releasebuffer  之間這個範圍,一定不能使用你要操作的這個緩衝cstring 物件的任何方法。因為 releasebuffer

被呼叫之前,該 cstring 物件的完整性得不到保障。研究以下**:   

cstring   s(...);   

lptstr   p   =   s.getbuffer();  //...   這個指標   p   發生了很多事情   

int   n   =   s.getlength();   // 有可能給出錯誤的答案!!!   

s.trimright();   // 不能保證能正常工作!!!!   

s.releasebuffer();   //  現在應該   ok   

int   m   =   s.getlength();   // 這個結果可以保證是正確的。   

s.trimright();   //   將正常工作。

假設你想增加字串的長度,你首先要知道這個字串可能會有多長,好比是宣告字串陣列的時候用:

char   buffer[1024];   

表示 1024 個字元空間足以讓你做任何想做得事情。

在 cstring   中與之意義相等的表示法:   

lptstr   p   =   s.getbuffer(1024);   

呼叫這個函式後,你不僅獲得了字串緩衝區的指標,而且同時還獲得了長度至少為 1024 個字元的空間(注意,我說的是「字元」,而不是「位元組」,

因為cstring是以隱含方式感知unicode的)。 

得乙個唯讀記憶體的指標,存入操作會失敗,並報告訪問錯誤。

C 之GetBuffer函式詳解

這個函式是為乙個cstring物件重新獲取其內部字元緩衝區的指標,返回的lptstr為非const的,從而允許直接修改cstring中的內容 如果nminbuflength 比當前buffer大,那麼就呼叫releasebuffer函式去釋放當前的buffer,用乙個被請求的大小去覆蓋這個buffe...

函式的使用

函式的定義 我們有乙個很簡單的函式echoname function echoname 他的結構如下 array type function name echoname property array child array array type echo value array type strin...

函式的使用

1.函式在呼叫時,只看函式名稱,不看引數名稱,至於調完後能不能正常執行,就看你怎麼寫了 function fun1 a,b fun1 1,2 返回值是3 fun1 1,2,3,4 返回值是3 fun1 相當於你定義了乙個變數,沒有給它初始化值,他的預設值是undefined。然後兩個undefine...