2011 國信藍點的軟件大賽就要開始了,所以這幾天都是用標準c語言規則去寫一些代碼。
以前都是用.cpp編譯的。由於大賽嚴格使用的是c語言,所以編譯的時候都是用.c文件。
想不到用.c寫的一個對文件內容進行歸類的程序,竟然錯誤百出。這些錯誤如果是寫成。cpp
的話是沒有任何問題的。接下來我就談談我遇到錯誤的一些細節吧。
1、函數前不要插入臨時變量
2、結構體中定義了二維數組或者定義了另一個結構體數組,在定義該結構體數組變量的時候。
只能自主的分配內存空間。也就是說,只能定義指針型結構體變量。然後自主的用malloc分配空間。
上圖在結構體中定義成員爲二維數組或結構體數組,在聲明變量的時候用的是數組結構體。運行結構如下:
正確的做法應該是:
如果結構體中沒有二維的指針或者數組結構體那麼程序就可以這樣寫。
對於c語言最好在開頭都定義好變量,如果在中途定義臨時變量。會莫名奇妙的出錯。
寫慣了c++這種情況真的不爽啊。
最新解釋:原來棧的存儲區域分配空間是有限的,vs2010默認小於1M。當分配
空間大於1M是就會造成錯誤。
最後還有一個很奇怪的現象。
如果把函數改爲memset(tempname, 0,256);memset(tempname, 0, 256);就不會出錯。
原因可能就是有關內存分配方面、結構體怎麼對齊。這種情況本人也很納悶。希望有哪位高人指點一下。