# C 編程,復習題
> 原文:[Processes, Part 1: Introduction](https://github.com/angrave/SystemProgramming/wiki/Processes%2C-Part-1%3A-Introduction)
> 校驗:[_stund](https://github.com/hqiwen)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
## 話題
* C 字符串表示
* C 字符串作為指針
* char p [] vs char * p
* 簡單的 C 字符串函數(strcmp,strcat,strcpy)
* sizeof char
* sizeof x vs x *
* 堆內存壽命
* 調用堆分配
* 取消引用指針
* 操作符的地址
* 指針算術
* 字符串重復
* 字符串截斷
* 雙重釋放錯誤
* 字符串文字
* 格式化打印
* 內存超出界限錯誤
* 靜態內存
* 文件io POSIX v C 庫
* C io fprintf 和 printf
* POSIX 文件 io(讀|寫|打開)
* stdout的緩沖
## 問題/練習
* 以下是什么打印出來的
```c
int main(){
fprintf(stderr, "Hello ");
fprintf(stdout, "It's a small ");
fprintf(stderr, "World\n");
fprintf(stdout, "place\n");
return 0;
}
```
* 以下兩個聲明之間有什么區別?其中一個`sizeof`會返回什么?
```c
char str1[] = "bhuvan";
char *str2 = "another one";
```
* c 中的字符串是什么?
* 編碼一個簡單的`my_strcmp`。 `my_strcat`,`my_strcpy`或`my_strdup`怎么樣?額外獎勵:編寫的函數僅需遍歷一遍字符串。
* 以下通常應該返回什么?
```c
int *ptr;
sizeof(ptr);
sizeof(*ptr);
```
* 什么是`malloc`?它與`calloc`有何不同?一旦內存被`malloc`編輯,我該如何使用`realloc`?
* 什么是`&`運算符? `*`怎么樣?
* 指針算術。假設以下地址。有以下幾種變化?
```c
char** ptr = malloc(10); //0x100
ptr[0] = malloc(20); //0x200
ptr[1] = malloc(20); //0x300
```
```
* `ptr + 2`
* `ptr + 4`
* `ptr[0] + 4`
* `ptr[1] + 2000`
* `*((int)(ptr + 1)) + 3`
```
* 我們如何防止雙重釋放錯誤?
* 什么是打印字符串,`int`或`char`的 printf 說明符?
* 以下代碼是否有效?如果是這樣,為什么? `output`在哪里?
```c
char *foo(int var){
static char output[20];
snprintf(output, 20, "%d", var);
return output;
}
```
* 編寫一個函數,該函數接受一個字符串并打開該文件,第一次打印出文件的40個字節,但其他每次打印都會反轉該字符串(請嘗試使用POSIX API)
* POSIX filedescriptor 模型和 C `FILE*`之間有什么區別(即使用了哪些函數調用,哪些是緩沖的)? POSIX 是否在內部使用 C `FILE*`,反之亦然?
- UIUC CS241 系統編程中文講義
- 0. 簡介
- #Informal 詞匯表
- #Piazza:何時以及如何尋求幫助
- 編程技巧,第 1 部分
- 系統編程短篇小說和歌曲
- 1.學習 C
- C 編程,第 1 部分:簡介
- C 編程,第 2 部分:文本輸入和輸出
- C 編程,第 3 部分:常見問題
- C 編程,第 4 部分:字符串和結構
- C 編程,第 5 部分:調試
- C 編程,復習題
- 2.進程
- 進程,第 1 部分:簡介
- 分叉,第 1 部分:簡介
- 分叉,第 2 部分:Fork,Exec,等等
- 進程控制,第 1 部分:使用信號等待宏
- 進程復習題
- 3.內存和分配器
- 內存,第 1 部分:堆內存簡介
- 內存,第 2 部分:實現內存分配器
- 內存,第 3 部分:粉碎堆棧示例
- 內存復習題
- 4.介紹 Pthreads
- Pthreads,第 1 部分:簡介
- Pthreads,第 2 部分:實踐中的用法
- Pthreads,第 3 部分:并行問題(獎金)
- Pthread 復習題
- 5.同步
- 同步,第 1 部分:互斥鎖
- 同步,第 2 部分:計算信號量
- 同步,第 3 部分:使用互斥鎖和信號量
- 同步,第 4 部分:臨界區問題
- 同步,第 5 部分:條件變量
- 同步,第 6 部分:實現障礙
- 同步,第 7 部分:讀者編寫器問題
- 同步,第 8 部分:環形緩沖區示例
- 同步復習題
- 6.死鎖
- 死鎖,第 1 部分:資源分配圖
- 死鎖,第 2 部分:死鎖條件
- 死鎖,第 3 部分:餐飲哲學家
- 死鎖復習題
- 7.進程間通信&調度
- 虛擬內存,第 1 部分:虛擬內存簡介
- 管道,第 1 部分:管道介紹
- 管道,第 2 部分:管道編程秘密
- 文件,第 1 部分:使用文件
- 調度,第 1 部分:調度過程
- 調度,第 2 部分:調度過程:算法
- IPC 復習題
- 8.網絡
- POSIX,第 1 部分:錯誤處理
- 網絡,第 1 部分:簡介
- 網絡,第 2 部分:使用 getaddrinfo
- 網絡,第 3 部分:構建一個簡單的 TCP 客戶端
- 網絡,第 4 部分:構建一個簡單的 TCP 服務器
- 網絡,第 5 部分:關閉端口,重用端口和其他技巧
- 網絡,第 6 部分:創建 UDP 服務器
- 網絡,第 7 部分:非阻塞 I O,select()和 epoll
- RPC,第 1 部分:遠程過程調用簡介
- 網絡復習題
- 9.文件系統
- 文件系統,第 1 部分:簡介
- 文件系統,第 2 部分:文件是 inode(其他一切只是數據...)
- 文件系統,第 3 部分:權限
- 文件系統,第 4 部分:使用目錄
- 文件系統,第 5 部分:虛擬文件系統
- 文件系統,第 6 部分:內存映射文件和共享內存
- 文件系統,第 7 部分:可擴展且可靠的文件系統
- 文件系統,第 8 部分:從 Android 設備中刪除預裝的惡意軟件
- 文件系統,第 9 部分:磁盤塊示例
- 文件系統復習題
- 10.信號
- 過程控制,第 1 部分:使用信號等待宏
- 信號,第 2 部分:待處理的信號和信號掩碼
- 信號,第 3 部分:提高信號
- 信號,第 4 部分:信號
- 信號復習題
- 考試練習題
- 考試主題
- C 編程:復習題
- 多線程編程:復習題
- 同步概念:復習題
- 記憶:復習題
- 管道:復習題
- 文件系統:復習題
- 網絡:復習題
- 信號:復習題
- 系統編程笑話