平时编程错误汇总(不定时更新)

fgets会把回车读入数组,有printf打印时会打印回车符自动换行,如果用puts打印的话会多一行空白行(puts打印会自动在字符串末尾加上\n回车符,加上fgets读取的输入的回车符所以会多出一行)

 

错误:程序中有游离的‘\xxx’

原因:有中文字符“” ;  () :等  最多情况是空格(在windows里复制粘贴到Linux环境里)

 

 

 

char str1[100] = "abcdefghigklmn";

char *p1 = str1;

printf("%p", p);---------输出指针指向的地址(类似这种形式: 0xbfb4e34c)

printf("%s",*p1);-------发生段错误,输出类型不匹配,*p1是指针指向地址内的内容,即字符'a'

printf("%c",*p1);-------a

printf("%s", p1);---------abcdefghigklmn,  指针指向字符串首地址, printf读取字符串时读到终止符‘\0’再打印

printf("%c",*(p1+1));------b(地址往后移移一位的值)

printf("%c",*p1+1);-------b(*p的值加上1后所得的结果,如果*p+2,则输出c)

*p1+1 = ‘z’------------左值无效,指针指向字符串,字符串为常量不可直接赋值改变。


gcc下用到数学函数,如sqrt。在gcc时要加上 -lm参数,这样告诉编译器我要用到数学函数了。


gcc编译,出现错误:为形参指定了存储类是什么原因----应该是你在声明函数、变量、结构体之类的东东的时候,语法有错误,请检查一下是不是哪里少了 ; 号之类的,或者头文件包含有没有出错~ 总之请检查语法错误~


不要用==来比较字符串和字符数组的大小,==会比较前后数据在内存中的地址,如果地址不同,数值就算一样编译器也不会认为二者相等,在定义字符数组是由系统分配内存地址空间,字符串常量在代码段,自己定义的字符数组变量在栈区,二者地址不会相同,最好用strcmp函数来比较两者(字符数组放前面比较好)


循环语句的后面不要加上习惯性加上;号,否则可能会造成段错误!!!(在你写的代码逻辑没问题语法没问题的情况下,发生段错误,看一眼循环语句后是否有;号)
举个例子    Node* p =   head;//Node位链表的结点类型,head为头结点 
                 while (p!= NULL);
                 {
                       p = p->next;//指针会一直往下个地址指,不会到NULL结束,编译报错:段错误          
                 }   

           

== 和 =   这两个符号含义用法很简单,但是还是要多注意,这两个混用的时候,有时编译不报错,但是程序上会存在错误,例如 外建函数

             void  change (int * num, int * count)

             {

                      count == 0;
                      num = 1;

             }

change函数运行结束后,引用change函数的函数(取名adc)中对应num的值变为1,对应count的值不变(没有变为0);

adc函数中如果需要用到count对应的值是0的话,则调用change函数的目的失败。(想让count的值变化,结果没变)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值