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語...