网站 微信开发,中国数据网,晋城有做网站的吗,建设摩托官网目录
前言
sterror函数
perror函数
断言处理方式 前言
在错误处理一中#xff0c;我们解释了C语言三种处理方式中的错误号处理方式#xff0c;这一篇我们在基于上一篇的基础上加入了sterror函数与perror函数#xff0c;以及断言处理方式的内容......
sterror函数
包含…目录
前言
sterror函数
perror函数
断言处理方式 前言
在错误处理一中我们解释了C语言三种处理方式中的错误号处理方式这一篇我们在基于上一篇的基础上加入了sterror函数与perror函数以及断言处理方式的内容......
sterror函数
包含头文件#include string.h
函数原型void perror(const char *s);
作用将给定的错误码转换为对应的错误消息字符串
注意事项strerror返回指向静态分配内存空间全局缓冲区中存储着结果字符串首地址的指针。因此在多线程环境下并发调用时可能会导致竞争条件和不可预测行为。如果需要保存结果请确保复制或拷贝该结果以避免潜在问题
常见使用方式
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#include string.h
#include errno.hint main() {int err EACCES; // 假设这里有一个特定的错误码char errMsg[256]; // 为了安全起见创建一个足够大的缓冲区strncpy(errMsg, strerror(err), sizeof(errMsg) - 1); //将strerror返回的内容存放在errMsg数组中sizeof(errMsg) - 1用于防止数组越界errMsg[sizeof(errMsg) - 1] \0; // 确保数组以\0结尾printf(Error message: %s\n, errMsg);return 0;
}perror函数
包含头文件#include stdio.h
函数原型void perror(const char *s);
作用打印与当前 errno 值相关联的错误消息到标准错误流stderr
注意事项perror 应该在产生错误后立即调用否则可能会被调用其他函数覆盖
常见使用方式
#define _CRT_SECURE_NO_WARNINGS //忽略文件操作函数不太安全的问题
#include stdio.hint main()
{FILE* pFile;pFile fopen(unexist.ent, rb);if (pFile NULL)perror(The following error occurred);elsefclose(pFile);return 0;
} 断言处理方式
原型void assert (int expression);
C89标准中表达式的类型必须是int
包含头文件#include assert.h
作用在代码中插入检查点检查表达式中的内容是否为真若不为真则中断程序
注意事项
1、显示的内容至少包括谁的断言失败、源文件的名称以及发生断言的行号
Assertion failed断言失败的表达式, file 文件名 line 问题所在行号
2、在发布版本中默认情况下编译器可能会禁用所有由 assert 引起的检查 这是因为assert会引入额外的检查会增加程序的运行时间在实际开发时即使是一个很小的运行时间的增加都是不能接受的因此一般只会在测试阶段使用assert断言当测试完成时我们会在#include assert.h之前加上#define NDEBUG就可以使assert断言失效 3、不要再assert的表达式中使用副作用的表达式包括函数调用一旦断言失效这些表达式将不会执行
//assert断言失效后malloc就不会执行
assert((p malloc(n)) ! NULL)
常见使用方式
//#define NDEBUG
#include stdio.h
#include assert.hint divide(int a, int b) {assert(b ! 0); // 断言除数不能为0return a / b;
}int main() {int result divide(10, 2);printf(Result: %d\n, result);result divide(8, 0); // 这里会触发断言错误printf(Result: %d\n, result);return 0;
}~over~