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 ...
随机推荐
- handsontable-mobiles
适配移动端:文档不完整,现在只能适配ipad4
- 【树状DP】星象仪
题目描述 在寂寞的夜里,星象仪是非常浪漫的东西.但是,你作为一个精神稍微有点不太正常的Geek,把原本正常的星象仪改造得像电报发送器一样.当然,你这个的构造还要更加奇葩一点.具体来说,你的星象仪是一棵 ...
- 初级 Web 开发人员的 Tomcat
介绍使用 Tomcat 对 JavaServer Pages (JSP).servlet 和 Web 服务进行编程,Tomcat 是来自 Apache Foundation 的开源应用服务器.本教程引 ...
- C#动态编译引擎-CS-Script 简单使用
Technorati 标记: cs-script 介绍可以参看 http://www.cnblogs.com/shanyou/p/3413585.html 还可以参看 这个 项目介绍 性能测试 c ...
- jenkins任务构建失败重试插件Naginator Plugin
jenkins任务失败重新构建插件Naginator Plugin jenkins任务经常会因为一些偶然因素失败,这时重新构建一次就肯能成功:jenkins的Naginator Plugin插件可以重 ...
- Linq中的group by多表多字段
在sql中,如果有group by,那么select的字段只能包含分组内容,或者count.sum.avg这些统计字段. 但在linq里面,是:group 你想要什么字段 by 分组字段 比如: va ...
- WP8.1StoreApp(WP8.1RT)---第三方启动
8.1的协议和wp8是相互通用的 被启动: 相比较wp8而言,基本变化不大,但添加方式更直观了 1:打开Package.appxmanifest 2:切换到"声明"选项卡 3:左侧 ...
- 如何关闭SQL进程
--通过下面的查询得到trace ID select * from sys.traces --修改下面的@traceid参数,关闭,删除对应的trace exec sp_trace_setstatus ...
- Neutorn LBaaS 原理
Load Balance as a Service(LBaaS)是 Neutron 提供的一项高级网络服务.LBaaS 允许租户在自己的网络中创建和管理 load balancer. load bal ...
- Java50道经典习题-程序10 自由落体
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? import java.util.Scanner; public cl ...