在linux中可用通过 man 3 OR man 2 OR man 来查看函数有什么参数和需要引入什么头文件
$ man 3 printf
$ man 2 open
char *basename(char *path);
此函数在libgen.h头文件中,使用时需引入头文件
#include
basename函数可以返回路径最后一个路径分隔符之后的内容,直白一点就是输出 “文件名”
#include
// = 号后面是输出的结果,可用 char 类型接收返回值
basename("/usr/local/nginx/conf/nginx.conf") = nginx.conf
basename("./a.out") = a.out
basename("/usr/include/libgen.h") = libgen.h
char *dirname(char *path);
此函数在libgen.h头文件中,使用时需引入头文件
#include
dirname函数可以返回文件所在路径
#include
// = 号后面是输出的结果,可用 char 类型接收返回值
basename("/usr/local/nginx/conf/nginx.conf") = /usr/local/nginx/conf
basename("./a.out") = .
basename("/usr/include/libgen.h") = /usr/include
int getopt(int argc, char * const argv[], const char *optstring);
#include
可以通过设置的optstring短参数指定‘:’ or ‘::’ or 不写‘:’获取带有‘-’后面的额外参数,具体可看例子理解这个函数,额外参数由全域变量 optarg 接收
#include
#include
int main(int argc, char *argv[])
{
// 接收返回值
int ret;
// while 循环是在调用脚本的时候循环获取参数,直到获取到-1时退出,也就是脚本后面可跟多个参数。否则只能跟一个就退出了
while((ret = getopt(argc,argv,"a:bc::")) != -1)
{
switch(ret)
{
case 'a':
printf("The argument of -a is: %s \n", optarg);
break;
case 'b':
printf("此参数没有额外参数\n");
break;
case 'c':
printf("The argument of -c is: %s \n", optarg);
break;
default:
return 0;
}
}
return 0;
}
把上述例子编译后看一下使用方式有什么区别
# 不带参数使用脚本,什么也没有,没有输出也没有报错
$ ./a.out
# 带 -a 参数使用 但是后面不加额外参数
$ ./a.out -a
报错信息:./a.out: option requires an argument -- 'a'
# 报错信息可以看出我们在使用-a 参数时,需要在后面再加一个额外参数,那就加上一个参数试试看是否能正常输出内容
$ ./a.out -a 0x05
The argument of -a is: 0x05
# 再次使用-b参数
$ ./a.out -b
此参数没有额外参数
# 一条命令可以把所有参数加上,我这个-c不知道什么原因 获取不到值
$ ./a.out -a 0x50 -b -c
上述实验可证明我们可以通过getopt函数获得额外参数,也就是根据不同参数获取不同的值。
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
如果atoi函数中的字符串非数字的话,则返回0
#include
把字符串转变成Integer类型 转换为long类型 转换为 long long类型
#include
#include
int main(){
int ret;
char * string = "10";
ret = atoi(string);
printf("value is : %d \n", ret);
return 1;
}
下面的输出结果,可以看到使用整型的占位符可以原样输出,但是如果你不先转换为整型去输出string指针变量的话,输出的就不是这个数了,其他两个函数跟这个类似,跟java中的Integer.valueof函数差不多
value is 10
对于float类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%f;
对于double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%lf;
对于long double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%lf。
#include
int main{
char cmd[256];
sprintf(cmd, "echo %s > /tmp/log.txt", "test");
system(cmd);
return 1;
}