C語言 新手程式設計時常見BUG彙總,持續更新中

2021-10-03 06:08:38 字數 1618 閱讀 1661

1.指標宣告但為賦值,輸入輸出會出現錯誤

#includeint main()
看似沒有問題的乙個程式吧?但是卻無法正確執行,是因為雖然對p指標進行了宣告,但是沒有賦予他記憶體空間,正確的寫法應該改

int *p = (int*)malloc(sizeof(int));
即可正確執行。(至於malloc的作用以及如何填寫malloc的引數,可以參看我的另一篇對malloc的詳解)。

上面的大家應該都明白,但是下面這個,是同樣的原理就有很多人犯糊塗

#include#includestruct node

;int main()

這個程式無法正確執行,是為什麼呢?因為c這個結構體指標陣列也沒有給他分配空間呀,所以出現的是一類問題。請大家要注意

#include#includetypedef struct node

*p;struct graph

;int main()

再看下這個**我只需給graph申請空間,就可以直接操作node了,因為graph結構體中有node,我申請了graph就自然給node也分配了記憶體空間

2.指標能否直接賦值?

typedef struct node

node;

typedef struct linklist

linklist;

/*******

這樣乙個普通的鍊錶,省略建立賦值等操作

*******/

能否有這樣的操作?

int main()

我們把a賦值給b後,對a進行了更改,再列印b;那麼b中的值應該是什麼呢?是1,2,3,4,5還是1,2,3,4;答案是b和a永遠保持一致,是1,2,3,4;在初次學習時候可能對此會有疑問,為什麼會是這樣的呢?原因是b和a都是指標指向的都是同一塊記憶體位址。b=a後b和a指向了同乙個記憶體位址,這時候a變化了後,列印b時,列印的是相同的一片空間。這下明白了吧?

3.scanf gets?puts printf?

#includeint main()

執行上述**輸入字串時候如果有空格,則會導致字串斷掉,不能正確的錄入空格,如下圖所示的情況:

解決方法是實用gets函式。即可接納空格,

printf("%s",str)和puts(str)在字串輸出方面沒有任何區別,不需要在此進行區分。

4.未完待續

c語言 常見BUG

這裡的這些小問題就是我們平時容易犯到,如果以前沒有犯過嚴加防範,反正一定要注意,這幾類很經典的.入門級 1.void test 這段 首先要知道,strncpy的用法,以及它的引數,char strncpy char dest,const char src,int n 把src所指向的字 符串中以s...

C語言程式設計時常犯的錯誤

c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,經常會出一些連自己都不知道錯在 的錯誤。看著有錯的程式,不知該如何改起,本人通過對c的學習,積累了一些c程式設計時常犯的錯誤,以供參考。1 書...

編寫C語言程式時,常見的錯誤!

程式發生語法錯誤,編譯器無法生成可執行檔案 1 是求餘運算,得到a b的整餘數。整型變數a和b可以進行求餘運算,而實型變數則不允許進行 求餘 運算。int main 2 c規定 如果在 格式控制 字串中除了格式說明以外還有其它字元,則在輸入資料時應輸入與這些字元相同的字元。int main 3 c語...