先看看下面的代碼:
char Array[12];
memset(Array,0,strlen(Array));
int Result = 0;
if(!Array)
{
Result = 1;
}
程序執(zhí)行到最后,Result的值還是為0.
memset函數(shù)的原型是void *memset(void *dest,int c,size_t count );它的作用只是把dest的內(nèi)存塊中的元素的值都設(shè)置為c,并非是將dest置為NULL(雖然NULL的定義是0);NULL是個特殊的類型,它的值是'\0',我們可以把它理解為一個指針常量,但絕不是空,編譯器對它是保護(hù)的,大多數(shù)我們用它來做邊界條件。memset(Array,0,strlen(Aarray))這句只是把Array所占用的內(nèi)存用0來初始化,并非將Array置為NULL;memset只是針對某一內(nèi)存塊中元素的值,而非地址;所以要想讓Result的值為1,必須把條件由Array變?yōu)锳rray[0].同樣在這里要注意的是我們不能改變常量,否則會報(bào)錯,所以當(dāng)這樣寫:char *ch = "1234"; memset(ch,0,strlen(ch)),雖然編譯可以通過,但是不能運(yùn)行,memset函數(shù)采用的值傳遞的方式傳參,由于我們把一個常量賦給一個變量是非法的,這樣會導(dǎo)致改變常量的內(nèi)容。