1,以下代碼中的兩個(gè)sizeof用法有問(wèn)題嗎?
sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)組的大小,無(wú)法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。注意:數(shù)組名作為函數(shù)參數(shù)時(shí),退化為指針。數(shù)組名作為sizeof()參數(shù)時(shí),數(shù)組名不退化,因?yàn)閟izeof不是函數(shù)。
請(qǐng)問(wèn)以下代碼有什么問(wèn)題
int main()
{
char a;
char *str = &a;
strcpy(str,”hello”);
printf(str);
return 0;
}
沒(méi)有為str分配內(nèi)存空間,將會(huì)發(fā)生異常
問(wèn)題出在將一個(gè)字符串復(fù)制進(jìn)一個(gè)字符變量指針?biāo)傅刂。雖然可以正確輸出結(jié)果,但因?yàn)樵浇邕M(jìn)行內(nèi)在讀寫而導(dǎo)致程序崩潰。
Strcpy的在庫(kù)函數(shù)string.h中,程序的主要程序在于越辦進(jìn)行內(nèi)存讀寫導(dǎo)致程序崩潰。
2,const char* s = “AAA”;
Printf(“%s”,s);
S[0] = ‘B’;
Printf(“%s”,s);
“AAA”是字符串常量,S是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問(wèn)題。
Const char* s =”AAA”,然后又因?yàn)槭浅A,所以?duì)S[0]的賦值操作是不合法的。
3,Char szstr[10];
Strcpy(szstr,”0123456789″);
產(chǎn)生什么結(jié)果?為什么?
正常輸出,長(zhǎng)度不一樣,會(huì)造成非法的OS,覆蓋別的內(nèi)容
4,交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;
兩種解法,一種是用算術(shù)算法,一種是用^(異或)
a = a+b;
b = a-b;
a = a-b;
or
a = a^b;//只能對(duì)int ,char
b = a^b;
a = a^b;
or
a ^= b ^=a;