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
相关文章
相关标签/搜索