C 中常見的程式設計錯誤

2021-06-05 16:51:49 字數 1055 閱讀 5147

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 資訊提示 我們可以根據後面的資訊提示去修改錯誤,當...