關於字串和memset,需要注意的地方

2021-07-27 18:05:45 字數 1045 閱讀 5318

char *pbuff = new

char[20];

memset(pbuff, 0, sizeof(pbuff));

pbuff = "hello,world!";

cout

細看之,這段**有如下3個問題:

1.pbuff所指向的記憶體洩漏

2.memset並未將pbuff所指向內容都清空

3.試圖釋放靜態儲存區的記憶體

分析下:

pbuff = "hello,world!";

這行**可以拆分成兩行**

char* pstr = "hello,world!"

pbuff = pstr;

這裡就很明顯的能看出問題1所在了,自己除錯一下就可以了。

至於問題3,pbuff所指向的東西都不是原來new出來的了,再去delete肯定出問題啊。

關於問題2得多說一些,我已經看到有很多的**都是這樣寫的,sizeof(pbuff) 算出來的是pbuff這個指標的大小,用memset去清空這段記憶體時,肯定不會清空所有的記憶體啊。針對這樣的寫法還有一點需要注意的地方,當定義乙個struct時,自己最好去實現乙個clear的方法來清空struct的資料,單純的使用memset會有一些問題,至於會出現什麼樣的問題就自己去探索了,這裡就不再多說了(我很懶)。

這裡再多說點東西,如下**:

char buff[10];

size_t sz = sizeof(buff);

這裡的sz=10,實際上是sizeof對buff陣列中的每乙個char都做了一次sizeof然後求和的結果,如果把char換成int,那麼sz=40,所以如果要將buff的內容清空,應該要這樣寫:

char buff[10];  //char 換成int,long等其他,同理

memset(buff, 0, sizeof(buff)/sizeof(buff[0]));

ps:寫這些東西在這裡是希望能警醒自己!

字串 不能memset

includechar str1 char str2 int main 都可輸出,說明str是可以比較,可以相減的。上面是抽象的乙個邏輯,下面看看具體情況的問題,有點兒意思哦 u8 mf scan files ext u8 path,u8 func,char name,char targetname...

關於字元陣列和字串

關於字元陣列和字串 引用 火未燃說 char a 5 和char a 10 有效字元5個,0 表示結束,china共5個字元,但在記憶體佔6個位元組,a 10 佔足五個後遇到 0 結束 結束符 系統會自帶的,不用畫蛇添腳 加上也無所謂 by eviloctal 首先說火未燃關於空字元系統自己加的說法...

關於字串

一些基本概念 用字元陣列儲存這麼乙個字串 char str hello world 然後我們應該知道,1.陣列的大小是12 字串字元個數 1 最後乙個元素為 0 用於標記字串的結束。0 不是數字0,它是非列印字元,其ascii碼值為0 2.若使用如下定義 char str 100 hello wor...