strlen()返回的是字符串的长度
使用malloc为字符串申请内存时必须申请+1的长度以便存放整个字符串
int ( * s[10] )( int ) 定义了一个含有10个函数指针的数组,数组长度为10,数组元素的类型是指向函数的指针。
运算符sizeof:返回值为size_t 型,而size_t定义为typedef unsigned int size_t,也就是说一个unsigned int 型,用%u或%lu输出,使用%d等会出现警告但不影响运行结果。
计算所分配的数组占用空间的大小,不受数组使用程度的影响,在编译时已经分配。
函数strlen:在运行时计算,参数只能是字符型指针(char *),且必须是以'\0\结尾。当以数组形式传入时,实际上数组已经退化为指针。
int **p,*q;
int arr[10];
p=&arr;此赋值方法错误,不同类型的指针不能进行相互赋值。
修改如下:q=arr;
p=&q;用指针q进行过渡。
gdb 调试
-g 如果要使一个可执行文件被gdb调试,那么 使用gcc 编译运行时加入-g.
quit命令退出gdb
(gdb)
显示查找程序源代码 list / list 5 10 / list a.c:,10 / list ger_num / list q.c get_num
gdb 下使用linux 命令前加 shell
设置断点
1、break 行号
2、break 函数名
3、break 行号或函数名 if 条件
4、 watch 条件表达式
gdb 运行后,以命令watch i==99 设置断点,gdb提示当前程序上下文没有i。这是因为此时该程序没有韵词那个因而i为定义。 可先在定义i之后设置断点然后运行。这时i被定义。再设置断点watch i==99 。然后删除之前的断点。
控制程序的执行
1、continue 命令让程序继续运行直到下一个断点或程序完。
2、next (n)命令和step( n )命令 nexti(ni)和step(si)类似,只是语句分开执行。
区别:如果遇到函数调用,next仅把函数当一条语句来执行,再次输入next执行函数调用后的语 句。 而step则会跟踪进入函数,一次一条执行,知道函数里完了,才执行函数调用后的语句。
info breakpoints 使用此命令可以查看所有断点
disable 断点编号 使某断点失效
disable 断点编号 使某断点恢复有效
删除断点
1、clear 删除程序中所有断点
2、clear 行号 删除该行所有断点
3、clear 函数名 删除该函数的断点
4、delete 断点编号 删除指定编号的断点
whatis 变量或表达式
用来显示该变量或表达式的数据类型
set命令
set variable 变量=值 用来给变量赋值
t
-g 如果要使一个可执行文件被gdb调试,那么 使用gcc 编译运行时加入-g.
quit命令退出gdb
(gdb)
显示查找程序源代码 list / list 5 10 / list a.c:,10 / list ger_num / list q.c get_num
gdb 下使用linux 命令前加 shell
设置断点
1、break 行号
2、break 函数名
3、break 行号或函数名 if 条件
4、 watch 条件表达式
gdb 运行后,以命令watch i==99 设置断点,gdb提示当前程序上下文没有i。这是因为此时该程序没有韵词那个因而i为定义。 可先在定义i之后设置断点然后运行。这时i被定义。再设置断点watch i==99 。然后删除之前的断点。
控制程序的执行
1、continue 命令让程序继续运行直到下一个断点或程序完。
2、next (n)命令和step( n )命令 nexti(ni)和step(si)类似,只是语句分开执行。
区别:如果遇到函数调用,next仅把函数当一条语句来执行,再次输入next执行函数调用后的语 句。 而step则会跟踪进入函数,一次一条执行,知道函数里完了,才执行函数调用后的语句。
info breakpoints 使用此命令可以查看所有断点
disable 断点编号 使某断点失效
disable 断点编号 使某断点恢复有效
删除断点
1、clear 删除程序中所有断点
2、clear 行号 删除该行所有断点
3、clear 函数名 删除该函数的断点
4、delete 断点编号 删除指定编号的断点
whatis 变量或表达式
用来显示该变量或表达式的数据类型
set命令
set variable 变量=值 用来给变量赋值