《Linux C编程一站式学习》笔记

gcc编译

  1. 直接编译
    gcc main.c
    a.out
  2. 指定可执行文件名
    gcc main.c -o main
    main
  3. 提示所有的警告信息
    gcc -Wall main.c
  4. 查看预处理之后、编译之前的程序
    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

Linux C笔记的更多相关文章

  1. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  2. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  3. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  4. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  5. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  6. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

  7. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

  8. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  9. 【转载】linux内核笔记之进程地址空间

    原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...

  10. 【转载】linux内核笔记之高端内存映射

    原文:linux内核笔记之高端内存映射 在32位的系统上,内核使用第3GB~第4GB的线性地址空间,共1GB大小.内核将其中的前896MB与物理内存的0~896MB进行直接映射,即线性映射,将剩余的1 ...

随机推荐

  1. (字符串 KMP)Blue Jeans -- POJ -- 3080:

    链接: http://poj.org/problem?id=3080 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...

  2. user_mongo_in_a_docker_and_dump_database

    使用 mongo docker 镜像 使用 mongo 镜像是很方便的,直接使用官方镜像就好了,为了今后更方便使用,这里给出依据 restheart-docker 中的 docker-compose. ...

  3. 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

    当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率.既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别. ...

  4. Postgresql 日志审计

    配置log_destination = 'csvlog'logging_collector = off log_directory = 'pg_log'log_connections = onlog_ ...

  5. Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)

    文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...

  6. Android studio 报错 installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK 解决方法

    解决方案: File->Setting->Build->Instant Run

  7. docker-compose 部署 Redis

    信息: Docker版本($ docker --version):Docker版本18.06.1-ce,版本e68fc7a 系统信息($ cat /etc/centos-release):CentOS ...

  8. Javascript 535种方式!!!实现页面重载

    原文地址: http://www.phpied.com/files/location-location/location-location.html 完全出于好玩,竟然有人整理了500多种方法来实现刷 ...

  9. 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】

    今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...

  10. 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】

    cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...