课堂笔记

段错误调试

     1.gcc –g 编译一下,启用GDB  run命令运行一下,会提示段错误的位置

      2.由于段错误编译时可以通过,遇到段错误时程序就会停止,可以在每行代码下加printf();打印部分内容,无法打印的printf();就是段错误所在位置

        进阶:利用内置宏printf(“%s:%d”,_func_,_LINE_);(在每行代码下加)

                   输出:main:9 (表示段错误在main文件第9行)

声明和定义的区别

     定义:1.需要分配内存空间

           2.只能定义一次  e.g.  int num; 

     声明:1.不分配内存空间,告知编译器这个变量已经开辟内存,提高编译速度

           2.可以声明多次

     变量的声明分类:1.定义性声明:需要开辟内存  int num;声明时建立存储空间

                     2.引用性声明:不需要开辟内存  externa int num;num在别的文件已经建立存储空间

格式控制输入输出

      1.scanf(”%d,%d”,&a,&b)   scanf每次遇到空格或回车结束一次录入

      2.“%d”称为占位符,也叫格式说明符,表示这里将被其他数据取代

       3.没有取地址符&出现段错误的原因:只有变量名无法获得唯一的地址,因为存在变量重名(地址具有唯一性)

       4.不常用变量类型:长整型:  %ld

                         double:  %lf

                         获得地址:%p

                        八进制:  %o(直接显示八进制:e.g.144)

                                   %#0(C标准显示八进制e.g. 0144)

                        十六进制:%x(直接显示十六进制:e.g. 64)

                                   %#x(C标准显示十六进制e.g. 0x64)

                                   %#X(……………………………………….0X64)

      案例:当前面为scanf为整型,下一个scanf为字符时,后面的scanf会获得\n,因为输入第一个scanf时会输入回车,会被下一个scanf读取到

解决方法:1.二者之间加一个getchar()函数(只能读取一个字符,用来把\n读取走)(遇到两个scanf,下一个直接自动输入时就用getchar()放两者之间)

          2.scanf(“  %c”,&ch); 加一个空格

          3.scanf(“%*c%c”,&ch);  加%*c

gets()函数警告的原因,它没有缓冲,也就是没有上限,容易造成数据溢出

  例如char src[10];

      gets(src)可以输入任意长度,回车后报错

 

作业

   1.用scanf怎么输入一个句子可以遇到空格不结束

   2.解决用gets输入指定长度密码(字符数组)报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值