C/C++混淆点-strcat和strcpy区别
??
一、原因分析
假設(shè): char * str=NULL; str=new char[11];你想為字符串str開辟一個存儲十個字符的內(nèi)存空間,然后你現(xiàn)在有兩個字符串:char * c1="abc"和char * c2="123";你想將這兩個字符串都拼接在str字符串中,你想用strcat這個函數(shù)。但是你直接用strcat編譯器會報錯!!!不能這樣做,應(yīng)該在拼接之前使用memset(字符串指針,0,想要設(shè)置的個數(shù))函數(shù)對新開辟的內(nèi)存空間進行清空,也是用0來代替。如果不這樣的話,萬一新開辟的內(nèi)存空間有其它值的話,strcat就不是從第一個位置開始拼接。對應(yīng)本例的情況,應(yīng)該在使用strcat之前調(diào)用memset(str,0,7);用7是有效字符個數(shù)為6,還有一個隱藏字符'\0'。
?當(dāng)然,還有一個方法,那就是先使用strcpy(str,c1),再使用strcat(str,c2)。為什么呢?因為strcpy把c1拷貝至str的內(nèi)存空間的時候是從第一位開始拷貝的,再用strcat拼接拷貝后的字符串就可以了。
二、msmset()函數(shù)介紹
memset函數(shù)詳細說明:void *memset(void *s,int c,size_t n)
總的作用:將已開辟內(nèi)存空間s的首n個字節(jié)的值設(shè)為值c。也就是將s所指向的某一塊內(nèi)存中的每個字節(jié)的內(nèi)容全部設(shè)置為ch指定的ASCII值,塊的大小由第三個參數(shù)指定,這個函數(shù)通常為新申請的內(nèi)存做初始化工作,當(dāng)然int c也可以換成字符,n就是你想要設(shè)置的個數(shù)。
三、常見用途
memset() 函數(shù)常用于內(nèi)存空間初始化。如:char str[10]; memset(str,0,10);我們本次說遇到的問題就是通過memset來解決的。其實就相當(dāng)于內(nèi)存清空。
一般為char str[10]={0}; 進行初始化
?
總結(jié)
以上是生活随笔為你收集整理的C/C++混淆点-strcat和strcpy区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django+Jquery+Ajax+验
- 下一篇: robotFramework-ride使