错误提示

Linux 提供的系统调用API,通常会在失败的时候返回 -1。如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数:

#include <stdio.h>
void perror(const char *s); #include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;

全局变量 errno

代码执行过程中发生错误时,Linux 会将 errno 这个全局变量设置为合适的值。errno 就是一个整数,对应系统中预先定义好的一个提示字符串。

perror 函数

perror 函数会读取 errno,然后找到预定义的提示字符串,最后将参数字符串、已定义的提示字符串拼接到一起,中间用冒号加空格分隔。相当于给错误信息加的注释。

示例

#include <stdio.h>
#include <errno.h>
#include <fcntl.h> int main()
{
char name[] = "non-exists.txt";
int ret = open(name, O_RDONLY);
if (ret < 0)
{
printf("%d\n", errno);
perror("this is my error");
}
return 0;
}

报错提示为:

2
this is my error: No such file or directory

命令行传参

C 程序的入口是 main 函数,其完整写法是包含两个参数的:

int main(int argc, char* argv[]);

其中第一个参数是命令行参数的个数,第二个参数是命令行参数数组。

例如下面这段代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
printf("argc is: %d\n", argc);
printf("argv[0] is: %s\n", argv[0]);
}

执行的命令默认是第一个参数,所以无任何参数时的输出为:

argc is: 1
argv[0] is: ./a.out

可以借助 argc 来遍历所有的参数:

#include <stdio.h>

int main(int argc, char* argv[])
{
int i;
printf("argc is: %d\n", argc);
for (i = 0; i < argc; i++)
{
printf("argv[%d] is: %s\n", i, argv[i]);
}
}

执行命令,同时传入参数:

# ./a.out  666 hello world test haha
argc is: 6
argv[0] is: ./a.out
argv[1] is: 666
argv[2] is: hello
argv[3] is: world
argv[4] is: test
argv[5] is: haha

最新文章

  1. jquery实现表格的搜索功能
  2. JAVA字符串的相关练习
  3. 施耐德Sepam 40系列备自投逻辑
  4. Android studio git 本地仓库和远程仓库节点对比
  5. java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)
  6. linux oracle10g安装
  7. SRM 600(1-250pt,500pt)
  8. SQL 处理空值
  9. FJUT2017寒假训练二题解
  10. BZOJ_1014_[JSOI2008]火星人prefix_splay+hash
  11. React实现局部刷新
  12. JDK8 lameda表达式学习例子
  13. Spring容器技术内幕之BeanWrapper类介绍
  14. spring boot 访问静态资源的步骤
  15. 去除外显子低质量reads时弹出错误“Invalid quality score value (char &#39;#&#39; ord 35 quality value -29) on line 4”和“Invalid quality score value (char &#39;.&#39; ord 46 quality value -18) on line 12”的解决方法
  16. jd-gui的使用方法
  17. Chapter 3 Phenomenon——2
  18. Github如何在本地创建一个空的仓库
  19. Liu Junqiao:生产环境中shell脚本实例
  20. 【leetcode 简单】第二十二题 对称二叉树

热门文章

  1. mysql如何查询一个字段在哪几张表中
  2. 可持久化BCJ
  3. 树上独立集数量 树型DP
  4. scrapy中的selenium
  5. 误删除mysql的root账号
  6. 【NOIP2016提高组day1】†换教室
  7. jsonp跨域实例
  8. ssh 密码连接报错 permission denied
  9. [SHOI2005]树的双中心
  10. Java并发编程的艺术笔记(一)——volatile和syncronized关键字