C语言不包含头文件可能会导致段错误

         前几天在Linux下用系统调用stat函数写程序,stat 函数是 Linux 中的系统调用,用于获取文件相关的信息。

在ubuntu用man手册查看一下stat函数:

        可以看到,stat函数的第二个参数是一个结构指针,这个结构中有三个成员是用来记录文件的被最后访问,文件内容被最后修改,文件状态被最后改变的信息的。

        现在我需要把一个测试文件的这三个时间打印出来,可以使用ctime函数,

代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
/*此处需要包含头文件 time.h, ctime()需要用到*/


/**
 *	Use sys_call func stat().	
 *	Test the file's inode num and size.
 *	Use ctime() get the time info of file.
 */

int main(int argc, char** argv)
{
	if (argc != 2)
	{
		fprintf(stderr,"Usge: %s [file name]\n", argv[0]);
		exit(-1);
	}

 	struct stat file_stat;
 	int ret;

 	ret = stat(argv[1], &file_stat);
	if (-1 == ret) 
	{
		 perror("stat error");
		 exit(-1);
 	}

	printf("file size: %ld bytes\ninode number: %ld\n", file_stat.st_size, file_stat.st_ino);

	printf("%s", ctime(&file_stat.st_ctime));
	printf("%s", ctime(&file_stat.st_atime));
	printf("%s", ctime(&file_stat.st_mtime));

    exit(0);

}

编译:

有告警!暂且不管它。

运行:

         出现了段错误,肯定是代码有问题,而且还是内存相关的问题。看gcc提示是说ctime()的返回值是整型,不对啊,我记得是返回是char* 类型。用man手册看一下:

        确实是char*,突然想到如果不声明函数返回类型会默认返回整型,大概率是头文件没有包含,果然是time.h。加上然后重新编译运行果然没问题了。

修改:

总结:      

  虽然是很简单的问题,但是却不容忽视,在这里记录一下。Linux编程需要用到大量的函数,无论是是标准io还是文件io,不可能记得所有函数的头文件,我们可以用linux的man手册来查看函数的详细介绍,另外gcc编译代码时候,我建议加上 -Wall 选项,尽量把程序调到没有告警为止,除非里面的告警是你可以解释的,比如有些变量定义了但是没使用这样的你心里有数的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值