C语言函数的使用记录

在linux中可用通过 man 3 OR man 2 OR man 来查看函数有什么参数和需要引入什么头文件

$ man 3 printf
$ man 2 open

函数

basename()

char *basename(char *path);

  • 引入

此函数在libgen.h头文件中,使用时需引入头文件

#include <libgen.h>

  • 作用

basename函数可以返回路径最后一个路径分隔符之后的内容,直白一点就是输出 “文件名”

  • 例子
#include <libgen.h>

// = 号后面是输出的结果,可用 char 类型接收返回值
basename("/usr/local/nginx/conf/nginx.conf") = nginx.conf
basename("./a.out") = a.out
basename("/usr/include/libgen.h") = libgen.h

dirname()

char *dirname(char *path);

  • 引入

此函数在libgen.h头文件中,使用时需引入头文件

#include <libgen.h>

  • 作用

dirname函数可以返回文件所在路径

  • 例子
#include <libgen.h>

// = 号后面是输出的结果,可用 char 类型接收返回值
basename("/usr/local/nginx/conf/nginx.conf") = /usr/local/nginx/conf
basename("./a.out") = .
basename("/usr/include/libgen.h") = /usr/include

getopt()

int getopt(int argc, char * const argv[], const char *optstring);

  • 引入

#include <unistd.h>

  • 作用

可以通过设置的optstring短参数指定‘:’ or ‘::’ or 不写‘:’获取带有‘-’后面的额外参数,具体可看例子理解这个函数,额外参数由全域变量 optarg 接收

  • 例子
#include <unistd.h>
#include <stdio.h>

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函数获得额外参数,也就是根据不同参数获取不同的值。

atoi()

int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);

如果atoi函数中的字符串非数字的话,则返回0

  • 引入

#include <stdlib.h>

  • 作用

把字符串转变成Integer类型 转换为long类型 转换为 long long类型

  • 例子
#include <stdlib.h>
#include <stdio.h>

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、double、long double类型的变量在printf()和scanf()中的占位符

对于float类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%f;

对于double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%lf;

对于long double类型的变量,printf()中的说明符可以用%f或%lf,而scanf()中的说明符则只能用%lf。

C中调用linux命令

  • 引入
#include <stdlib.h>
int main{
	char cmd[256];
	sprintf(cmd, "echo %s > /tmp/log.txt", "test");
	system(cmd);
	return 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值