1、嘗試修改字串常量
char *p = "i'm hungry!";
p[0]= 's';
答案與分析:
上面的**能成功通過編譯,但會產生執行時的錯誤即造成記憶體的非法寫操作。 "i'm hungry"實質上是字串常量,而常量往往被編譯器放在唯讀的記憶體區,不可寫。p初始指向這個唯讀的記憶體區,而p[0] = 'i'則企圖去寫這個地方,編譯器當然不會答應。
2、沒有結束標誌『\0『的假字串
char a[3] = "abc";合法嗎?使用它有什麼隱患?
printf("%s",a);
結果:輸出abc後面跟著一堆亂碼。將陣列a的長度改為大於3就可以。也不要顯示的新增字串結束標誌,以為在初始化字串或使用scanf函式初始化時系統會自動在字串結尾新增結束標誌。
答案與分析:
在標準c中這是合法的,但是它的生存環境非常狹小;它定義乙個大小為3的陣列,初始化為"abc",注意,它沒有通常的字串終止符'\0',因此這個陣列只是看起來像c語言中的字串,實質上卻不是,因此所有對字串進行處理的函式,比如strcpy、printf等,都不能夠被使用在這個假字串上。
3、將陣列名作為左值
char a[3],b="china";
a=b;
printf("%s",a);
編譯時提示出錯:
因為陣列名表示陣列首元素的位址,其值不能改變所以陣列名不能作為左值。
4、兩個指標可以相減,但是相加沒有意義
int a[10],*p1,*p2;
p1=a;
p2=&a[5];
結果:
分析:(1245008-1244988)/4=20/4=5; 除以4因為sizeof(int)=4; p2-p1 即其所指字元的間距。
若p1+p2;則會在編譯時出現以下錯誤:
Python 之 程式設計中常見錯誤
1 變數名不正確 message hello print msg 錯誤資訊 nameerror name msg is not defined 2 單引號包圍的字串中包含單引號,雙引號包圍的字串中包含雙引號 message he llo print message 錯誤資訊 syntaxerror ...
C語言中常見錯誤
c語言的最大特點是 功能強 使用方便靈活。c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,經常會出一些連自己都不知道錯在 的錯誤。看著有錯的程式,不知該如何改起,本人通過對c的學習,積累了一...
js中常見的錯誤
1.錯誤分為兩種 1 錯誤 這種錯誤瀏覽器會報錯,可以根據錯誤型別去排錯 2 邏輯錯誤 這種錯誤瀏覽器不會報錯,但是可以使用斷點進行除錯排錯 2.錯誤型別 2.1語法錯誤 即寫的 不符合js編碼規則 報錯為 uncaught syntaxerror 資訊提示 我們可以根據後面的資訊提示去修改錯誤,當...