内容重点:
重点介绍处理字符和字符串的库函数的使用和注意事项
下面是将要介绍的几个函数:
- 求字符串长度 strlen
- 长度不受限制的字符串函数 strcpy strcat strcmp
- 长度受限制的字符串函数介绍 strncpy strncat strncmp
- 字符串查找 strstr strtok
- 错误信息报告 strerror(本节)
- 字符操作
- 内存操作函数 memcpy memmove memset memcmp
strerror
char * strerror ( int errnum );
例子1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char* p = strerror(0);
printf("%s\n", p);
char* p1 = strerror(1);
printf("%s\n", p1);
char* p2 = strerror(2);
printf("%s\n", p2);
return 0;
}
输出结果:
但是,为什么strerror函数里面为1,2,3时,会输出不同的错误信息呢?
strerror在给定的错误码上面能够把错误码所对应的错误信息的首字母地址返回,因此%s能够打印出来。
因为C语言的库函数在调用失败的时候,会将一个错误码存放在一个叫 errno 的变量中,当我们想知道在调用库函数是发生了什么错误信息,就可以将 errno 中的错误码翻译成错误信息。
需要注意的是:如果出现多个错误信息要及时进行打印表明, 比如库函数1的错误信息是3,库函数2的错误信息是2,如果最后才检查错误可能会出现遗漏的情况,因为都是把错误信息存在errno上并将上一次的覆盖掉,因此建议及时检查错误信息。
例子2
现在用打开读取文件的场景,使用strerror
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
//打开文件
//打开文件的时候,若打开的方式为“r”
// 若文件存在则打开,若文件不存在则打开失败
//若打开文件失败,会返回NULL
FILE* pf = fopen("test.txt", "r"); //意思是 以读的形式打开文件test.txt
if (pf == NULL)
{
printf("打开文件失败,原因是:%s\n", strerror(errno));//errno.h
return 1;
}
//读写文件
//……
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
这里我们没有放“test.txt” ,所以会打印失败
(插一句:如果我们需要放一个“test.txt”的文档,请不要写成“test.txt.txt”,计算机是不会骗人的!注意后缀名!)
输出结果:
perror
还可以使用perror,是将自己的出入信息printf和错误信息(strerror)一并输出(printf+strerror)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
//打开文件
//打开文件的时候,若打开的方式为“r”
// 若文件存在则打开,若文件不存在则打开失败
//若打开文件失败,会返回NULL
FILE* pf = fopen("test.txt", "r"); //意思是 以读的形式打开文件test.txt
if (pf == NULL)
{
perror("打开文件失败");
return 1;
}
//读写文件
//……
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
输出结果:
(本节完)