Linux C笔记
《Linux C编程一站式学习》笔记
gcc编译
- 直接编译
gcc main.c
a.out
- 指定可执行文件名
gcc main.c -o main
main
- 提示所有的警告信息
gcc -Wall main.c
- 查看预处理之后、编译之前的程序
gcc -E main.c
生成随机数
- rand()
/*
rand()生成的随机数是介于0~RAND_MAX之间的整数,不同平台上RAND_MAX的值可能不一样。
*/
#include <stdlib.h>
rand()%upper_bound
- 用srand函数指定Seed来生成随机数
/*
time函数得到的是距离1970年1月1日00:00:00的秒数
NULL表示空指针
*/
#include <stdlib.h>
#include <time.h>
srand(time(NULL));
字符串
- 符串字面值是只读的,
“Hello, world!”[0] = 'A';是不允许的。 char str[10] = "Hello";相当于char str[10] = { 'H', 'e', 'l', 'l', 'o', '\0' }。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调试
- 在编译时要加上-g选项,生成的目标文件才能用gdb进行调试:
gcc -g main.c -o main
gdb main
- backtrace(或bt) 查看各级函数调用及参数
- finish 执行到当前函数返回,然后停下来等待命令
- frame(或f) 帧编号 选择栈帧
- info(或i) locals 查看当前栈帧局部变量的值
- list(或l) 列出源代码,接着上次的位置往下列,每次列10行
- list 行号 列出从第几行开始的源代码
- list 函数名 列出某个函数的源代码
- next(或n) 执行下一行语句
- print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数
- set var 修改变量的值
- start 开始执行程序,停在main函数第一行语句前面等待命令
- step(或s) 执行下一行语句,如果有函数调用则进入到函数中
- break(或b) 行号 在某一行设置断点
- break 函数名 在某个函数开头设置断点
- break...if... 设置条件断点
- continue(或c) 从当前位置开始连续而非单步执行程序
- delete breakpoints 删除断点display 变量名 跟踪查看一个变量,每次停下来都显示它的值
- disable breakpoints 禁用断点
- enable breakpoints 启用断点
- info(或i) breakpoints 查看当前设置了哪些断点
- run(或r) 从头开始连续而非单步执行程序
- undisplay 取消对先前设置的那些变量的跟踪
- watch 设置观察点
- info(或i)
- 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++)
- x 从某个位置开始打印存储器的一段内容,全部当成字节来看,而不区分哪些字节属于哪些变量
(gdb) x/7b input
Linux C笔记的更多相关文章
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
- Linux学习笔记(一)2015.4.13
研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 跟着鸟哥学Linux系列笔记0-如何解决问题
跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1. 在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...
- 【转载】linux内核笔记之进程地址空间
原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...
- 【转载】linux内核笔记之高端内存映射
原文:linux内核笔记之高端内存映射 在32位的系统上,内核使用第3GB~第4GB的线性地址空间,共1GB大小.内核将其中的前896MB与物理内存的0~896MB进行直接映射,即线性映射,将剩余的1 ...
随机推荐
- (字符串 KMP)Blue Jeans -- POJ -- 3080:
链接: http://poj.org/problem?id=3080 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...
- user_mongo_in_a_docker_and_dump_database
使用 mongo docker 镜像 使用 mongo 镜像是很方便的,直接使用官方镜像就好了,为了今后更方便使用,这里给出依据 restheart-docker 中的 docker-compose. ...
- 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签
当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率.既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别. ...
- Postgresql 日志审计
配置log_destination = 'csvlog'logging_collector = off log_directory = 'pg_log'log_connections = onlog_ ...
- Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)
文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...
- Android studio 报错 installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK 解决方法
解决方案: File->Setting->Build->Instant Run
- docker-compose 部署 Redis
信息: Docker版本($ docker --version):Docker版本18.06.1-ce,版本e68fc7a 系统信息($ cat /etc/centos-release):CentOS ...
- Javascript 535种方式!!!实现页面重载
原文地址: http://www.phpied.com/files/location-location/location-location.html 完全出于好玩,竟然有人整理了500多种方法来实现刷 ...
- 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】
今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...
- 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...