
引入fgets函數函數原型char *fgets(char *str, int size, FILE *stream);參數char *str:字符數組存放讀到的字符串int size最多讀取size-1個字符留 1 位存結束符\0FILE *stream數據流。返回值讀取成功返回str地址讀到文件末尾 EOF / 讀取失敗返回NULL作用用于從文件流 / 標準輸入讀取一行字符串鍵盤和文件也是文件鍵盤文件stdin標準輸入屏幕文件stdout標準輸出stderr標準錯誤輸出圖片上代碼在輸入end時應當退出程序為什么輸入end沒有退出程序呢想要找到問題我們可以通過調試來查找問題。調試工具gbdtest.c只是文件不是程序test 放到磁盤上叫程序./test 運行起來進程這個是調試的東西gcc -o test test.c用gcc編譯器編譯 test.c 源代碼生成名為 test的可執行程序。不可調試沒有調試信息gcc -o test test.c -g生成開發調試版本用于 gdb 調試。編譯的時候加上參數-g是為了包含調試信息調試命令l 顯示代碼 默認打印當前位置前后共 10 行源代碼 l 行號 快速跳轉到指定代碼行查看上下文 l filename:行號 快速跳轉到指定代碼行查看上下文 b 行號 加斷點b 函數名字 加斷點info break 顯示斷點信息查看斷點信息r 運行程序只會運行一次n 單步執行p 打印變量、表達式、地址c 繼續執行不再單步執行s 進入函數finish 跳出函數q 退出程序bt 查看函數調用的棧函數補充內容主函數參數main(int argc, char* argv,char* envp[])argc 參數個數 argv參數內容 envp環境變量man 幫助手冊查命令函數的說明文檔1命令2系統調用3庫函數printf()緩沖區圖片中的程序結果是先睡眠3秒然后打印hello這是為什么呢printf不會立刻把內容打到屏幕上會把要打印的內容先放到緩沖區緩沖區滿了才會打印。緩沖區什么時候打印到屏幕上呢滿足以下三種情況1.緩沖區滿了2.強制刷新\n 換行觸發行緩沖刷新文字立刻打印fflush(stdout) 強制把緩沖區內容輸出到屏幕3.程序要退出了 先刷緩沖區再退出程序exit()退出進程exit()會執行兩步操作1先刷緩沖區2再調_exit()退出程序_exit()只退出程序不會刷緩沖區