每个人都是从新手过来的,一路走来都是在不断谜茫中学习、犯错、再谜茫、再学习中一步步成长起来的,也许有的问题和错误看起来很傻,但却是犯了,要勇敢面对,下面奉上我自己学习的成长笔记:
1、printf ... 等一系列格式化输出时,一定要注意格式,比如字符串用%f输出时就会出现段错误
2、strerror -- 功能:通过标准错误的标号,获取系统错误信息或打印用户程序错误信息,获得错误的描述字符串。
例:printf("errno[%d] errmsg[%s]",errno,strerror(errno));
3、strtol是atoi的增强版,尽量用strtol代替atoi
4、函数形参指针,在函数里面不能修改,会改变外部传入buffer的值
例:
int fun(char *ps)
{
char *str = ps;
str[5] = '\0';
sprintf(ps,"hello world !");
return 0;
}
危险危险危险!!!! 恶补指针,函数传入参数为指针时,若不能在函数内修改的,养成习惯,请在前面加const修饰!!
5、变量和指针的本质都是变量,变量存放的是值,指针存放的值是地址,所有对变量引用时得到的是变量值,对指针引用时
6、fnmatch ???文件通配
7、 int remove(const char *filename);
功 能: 删除一个文件,相当于unlink函数,但是如果它的filename参数是一个目录的话,其作用就相当于rmdir函数。
回值:如果删除成功,remove返回0,否则返回EOF(-1)
8、在初始化结构体是要加&取地址,不然初始化不成功
例:struct Tlist stlist;
memset(stlist,0x00,sizeof(stlist)); 这个如果编译检查严格的话,编译时通不过的,但是很多时候编译器执行检查能让其通过,但实际不但不能初始化成功,而且还很危险
正确初始化方法: memset(&stlist,0x00,sizeof(stlist));
9、在头文件中定义的static int a ; 变量,对于每一个引用此变量的源文件来说,此变量都是一个文件内部的全局变量,而不是整个工程的全局变量,在一个文件内改变a的值,不会影响工程中其他的文件中的a的值
10、指针接收返回值是需特别小心
例:
int fun1()
{
int iRet = 0;
.....
return iRet ;
}
int fun( int *outPara)
{
*outPara = fun1();
return 0;
}
当用*outPara去接收 int fun1()的返回值是,有时会导致程序非法退出,以前的一个程序就是这么用的,运行差不多一年了没任何问题,但昨天突然就非法退出,找了半天问题没找出来,还亏了别人解救才发现这个;小伙伴们以后千万要小心这个问题啊,因为这个不是必然会导致程序坏死,很多时候专门去测试的时候还测不出来,但是说不定啥时候系统内存不稳或莫名的情况就会导致程序坏死了,导致严重后果,遇到这种情况的时候,如果是linux系统或Unix系统,就得借助core文件gdb调试,bt打出堆栈信息找问题了
阅读(800) | 评论(0) | 转发(1) |