1.系統呼叫與庫函式的區別
答案:函式庫呼叫
系統呼叫
在所有的ansi c編譯器版本中,c庫函式是相同的
各個作業系統的系統呼叫是不同的
它呼叫函式庫中的一段程式(或函式)
它呼叫系統核心的服務
與使用者程式相聯絡
是作業系統的乙個入口點
在使用者位址空間執行
在核心位址空間執行
它的執行時間屬於「使用者時間」
它的執行時間屬於「系統」時間
屬於過程呼叫,呼叫開銷較小
需要在使用者空間和核心上下文環境間切換,開銷較大
在c函式庫libc中有大約300個函式
在unix中大約有90個系統呼叫
典型的c函式庫呼叫:system fprintf malloc
典型的系統呼叫:chdir fork write brk;
2.sizeof和strlen的區別
答案:
首先需要說明的是sizeof和strlen都可以求長度,但是卻有很大的區別,簡單來說可以概括為以下幾點:
1、sizeof是乙個關鍵字,而strlen確實乙個函式。
2、sizeof求的是位元組長度,而strlen求的卻是實際長度。
比如int a=1;sizeof(a)==4而strlen(a)=1
3、sizeof求的是分配過來的長度,而strlen求的卻是實際使用的長度。
比如:char a[30]="abcd";
sizeof(a)=30;而strlen(a)=4;
4、strlen求的長度是以'\0'結束的。
比如char a[30];strlen(a)的結果是不定的,而sizeof(a)=30;
同理:char a[30]=;對於strlen來說也是不定的,而sizeof卻是30.
3.c語言程式分配的方式(linux)
1、從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2、在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。
3、從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。
4.c語言常見的記憶體錯誤
1 、 記憶體分配後沒有校驗,使得記憶體未成功,卻正常使用。
2 、 記憶體分配成功後,沒有初始化就使用。
3 、 記憶體分配成功 , 也進行了初始化 , 可是使用記憶體時出現了越界 ( 緩衝區溢位 ) 。 這種錯 誤如果被黑客成功利用,最嚴重的後果就是整個作業系統被黑客完全控制。
4 、 記憶體分配成功後,忘記釋放記憶體,產生記憶體洩漏。
5 、 記憶體分配成功後,也正常釋放記憶體,可是在釋放記憶體後又繼續使用。
6 、 混淆指標和陣列
筆試題小記 招行3
如果乙個正整數,它的質因數只包含2,3,和5,那麼這個數滿足條件。同時,特別規定1也是滿足條件的數字。示例 前10個滿足條件的數字是1,2,3,4,5,6,8,9,10,12。編寫乙個函式,返回第n個滿足條件的數。解題思路 質因數只包含2,3,5,即其他的質數以及他們的倍數都不在此陣列中,求出這些數...
創新工場筆試小記(創新工廠演算法筆試題)
筆試題量很小,答題時間1個小時。1道填空題,9道左右選擇題,最後一道程式設計題。第一題 c intf intx return c int f int x return c 對於int a 65536 1024 8 1 int b f a 執行後b等於多少?第二題 5個骰子,六個面分別標有1 6,現在...
筆試 c 筆試題
1 在派生類中通過 base 呼叫基類成員 解析 2 方法重寫使用關鍵字 override 解析 使用virtual和override關鍵字實現方法重寫 3 關於抽象類下面說法錯誤的是 選一項 a 抽象類可以包含非抽象方法 b 含有抽象方法的類一定是抽象類 c 抽象類不能被例項化 d 抽象類可以是密...