Linux C筆記

《Linux C編程一站式學習》筆記

gcc編譯

  1. 直接編譯html

    gcc main.c
    a.out
  2. 指定可執行文件名linux

    gcc main.c -o main
    main
  3. 提示全部的警告信息git

    gcc -Wall main.c
  4. 查看預處理以後、編譯以前的程序github

    gcc -E main.c

生成隨機數

  1. rand()編程

    /*
    rand()生成的隨機數是介於0~RAND_MAX之間的整數,不一樣平臺上RAND_MAX的值可能不同。
    */
    #include <stdlib.h>
    rand()%upper_bound
  2. 用srand函數指定Seed來生成隨機數數組

    /* 
    time函數獲得的是距離1970年1月1日00:00:00的秒數
    NULL表示空指針
    */
    #include <stdlib.h>
    #include <time.h>
    srand(time(NULL));

字符串

  1. 符串字面值是隻讀的,「Hello, world!」[0] = 'A';是不容許的。
  2. char str[10] = "Hello";至關於char str[10] = { 'H', 'e', 'l', 'l', 'o', '\0' }
  3. printf("string: %s\n", str);表示printf從數組str的開頭一直打印到'\0'爲止('\0'自己不打印)。若是沒有'\0'會出現越界。

多維數組

int a[][2] = {
    { 1, 2 },
    { 3, 4 },
    { 5 }
};
/* 第一維能夠不指定,而是由編譯器自動計算 */
char days[8][10] = {
    "Monday",
    "Tuesday"
}

scanf

int man, ret;
ret = scanf("%d", &man);
if (ret != 1) {
    printf("Invalid input!\n");
}
/*
等待用戶輸入一個整數並回車,這個整數會被 scanf 函數保存在 man 這個整型變量裏。若是用戶輸入合法(輸入的確實是整數而不是字符串),則 scanf 函數返回1,表示成功讀入一個數據。
%d、%f、%c分別表示讀入一個整數、浮點數或者字符,第二個參數須要加&;
%s表示字符串,第二個參數應該是數組名,不須要加&
*/

indent

indent -kr -i8 main.c函數

gdb調試

  1. 在編譯時要加上-g選項,生成的目標文件才能用gdb進行調試:學習

    gcc -g main.c -o main
    gdb main
  2. backtrace(或bt) 查看各級函數調用及參數
  3. finish 執行到當前函數返回,而後停下來等待命令
  4. frame(或f) 幀編號 選擇棧幀
  5. info(或i) locals 查看當前棧幀局部變量的值
  6. list(或l) 列出源代碼,接着上次的位置往下列,每次列10行
  7. list 行號 列出從第幾行開始的源代碼
  8. list 函數名 列出某個函數的源代碼
  9. next(或n) 執行下一行語句
  10. print(或p) 打印表達式的值,經過表達式能夠修改變量的值或者調用函數
  11. set var 修改變量的值
  12. start 開始執行程序,停在main函數第一行語句前面等待命令
  13. step(或s) 執行下一行語句,若是有函數調用則進入到函數中
  14. break(或b) 行號 在某一行設置斷點
  15. break 函數名 在某個函數開頭設置斷點
  16. break...if... 設置條件斷點
  17. continue(或c) 從當前位置開始連續而非單步執行程序
  18. delete breakpoints 刪除斷點display 變量名 跟蹤查看一個變量,每次停下來都顯示它的值
  19. disable breakpoints 禁用斷點
  20. enable breakpoints 啓用斷點
  21. info(或i) breakpoints 查看當前設置了哪些斷點
  22. run(或r) 從頭開始連續而非單步執行程序
  23. undisplay 取消對先前設置的那些變量的跟蹤
  24. watch 設置觀察點
  25. info(或i)
  26. watchpoints 查看當前設置了哪些觀察點指針

    (gdb) watch input[5]
    Hardware watchpoint 2: input[5]
    (gdb) i watchpoints
    Num Type Disp Enb Address What
    2    hw watchpoint keep y input[5]
    Hardware watchpoint 2: input[5]
    Old value = 1 '\001'
    New value = 2 '\002'
    0x0804840c in main () at main.c:11
    11
    for (i = 0; input[i] != '\0';
    i++)
  27. x 從某個位置開始打印存儲器的一段內容,所有當成字節來看,而不區分哪些字節屬於哪些變量調試

    (gdb) x/7b input
相關文章
相關標籤/搜索