Day2
错误处理
-
通过函数返回值表示错误
返回值合法表示成功,非法表示失败
返回有效指针表示成功,空指针(NULL/0xffffffff)表示失败
0成功,-1失败
永远成功
printf
练习1:
str_len
求字符串的长度,若指针为空则报错练习2:
str_cpy(char* dest,size_t dlen,char* src)
字符串拷贝函数,考虑目标的溢出问题如果目标无效或超出则报错练习3:
intmin
求两个整数的最小值,二者相等,则报错练习4:
intavg
求两个整数的平均值,该函数永远成功
homework
-
通过errno表示错误
<errno.h>
errno
是一个全局变量,随时可能发生变化,可以将它转换成有意义的字符串
printf("%s\n",strerror(errno))
perror("msg")
注意,在函数执行成功的情况下,不会修改errno的值
因此不能以errno的值不等于0就判断函数执行出错了
所以通常会和函数的返回值配合判断是否出错,通过errno查询出了什么类型的错误.void exit_msg(char* msg){ perror(msg); exit(-1); }
环境变量
以字符串形式存在的,绝大多数记录了一些路径,它表示了当前操作系统的资源配置,环境设置等相关信息
-
环境变量表
每个程序运行时,操作系统都会把所有环境变量记录到一张表中,传给程序
- 通过main函数的参数获取
int main(int arg,char* argv[],char* environ[]){ for(int i=0;environ[i];i++){ printf("%d %s\n",i,environ[i]); } }
- 通过声明为全局变量获取
extern char **environ;
-
环境变量函数
char *getenv(const char *name);
根据环境变量名,获取环境变量的值
int putenv(char *string);
以name=value形式设置环境变量,如果环境变量存在则更新,不存在则添加
返回0成功,-1失败
int setenv(const char *name, const char *value, int overwrite);
设置name环境变量的值为value,如果name存在且overwrrite不为零则更新,否则不变
int unsetenv(const char *name);
从环境变量表中删除name
int clearenv(void);
清空环境变量表
-
系统提供的环境变量的数据记录在一块特殊的存储空间,而在程序中自己添加的环境变量需要自己准备存储空间
-
每个程序只能得到该表的副本,修改操作只对自己有效
-
练习5:从文件中读取一个程序的配置信息
ServerIP = 192.168.0.1
Port = 8899
MaxSize = 100
ContinueSec = 3
LogPath = /…
DataPath = /…
练习6:给LIBRARY_PATH添加一个路径(/home/zhizhen/lib)
homework
``int unsetenv(const char *name);``
从环境变量表中删除name
``int clearenv(void);``
清空环境变量表
-
系统提供的环境变量的数据记录在一块特殊的存储空间,而在程序中自己添加的环境变量需要自己准备存储空间
-
每个程序只能得到该表的副本,修改操作只对自己有效
练习5:从文件中读取一个程序的配置信息
ServerIP = 192.168.0.1
Port = 8899
MaxSize = 100
ContinueSec = 3
LogPath = /…
DataPath = /…
练习6:给LIBRARY_PATH添加一个路径(/home/zhizhen/lib)
homework