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 ...
随机推荐
- delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决
delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决,需要打这个 ...
- archlinux 64bit 开发android
arch 64位下直接运行android emulator会出现错误:“Failed to start emulator: Cannot run program "xxxx/sdk/tool ...
- Open XML操作Excel导入数据
项目中发现使用OleDb(using System.Data.OleDb)相关对象处理Excel导入功能,不是很稳定经常出问题,需要把这个问题解决掉.项目组提出使用OpenXML来处理Excel的导入 ...
- ansible常用ad hoc操作
ansible group001 -i hosts.ip -m shell -a -v
- hibernate SQL Error: 8152, SQLState: 22001
这种会出现字符串截断 数据库字段长度设置太小,改大即可.
- dockerfile 构建tomcat
事先下载好tomcat和jdk的二进制包. 下载地址https://pan.baidu.com/s/1kWWHGEV 值得一说的是 tomcat的官方镜像 剪切了很多jdk和系统命令,所以生产环境建议 ...
- Linux基础实验(二)
一)基础实验: 1. 新建文件a.txt,并用权限模式.权限值两种方式修改权限为rwxrwx--x 新建文件:touch a.txt 权限模式:chmod ug=rwx o=x a.tx ...
- OCP考试题库更新,052最新考题及答案整理-第8题
8.Which two are true about the Fast Recovery Area (FRA)? A) It should be larger than the database. B ...
- linux系统解决boot空间不足
有时候更新Linux系统是会碰到boot空间不足的错误,原因基本上是安装时boot空间设置问题可以通过删除旧的内核来释放boot空间. ubuntu: 1.查看当前使用内核版本号 unam ...
- Java性能优化技巧及实战
关于Java代码的性能优化,是每个javaer都渴望掌握的本领,进而晋升为大牛的必经之路,但是对java的调优需要了解整个java的运行机制及底层调用细节,需要多看多读多写多试,并非一朝一夕之功.本文 ...