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