malloc的使用
strlen求出的值没有计入串结尾的‘\ 0’字符,而strcpy却将复制它。所以这里分配的空间实际上是不够的,这将使strcpy的写入超过所分配空间的界限。习惯写法是:
1 | p = malloc(strlen(buf) + 1); |
所以,如果没有+1,就要特别注意了。
老的C语言程序员中有一种倾向,就是把很短的执行频繁的计算写成宏,而不是定义为函数。完成I / O的getchar
,做字符测试的isdigit
都是得到官方认可的例子。人们这样做最根本的理由就是执行效率:宏可以避免函数调用的开销。实际上,即使是在C语言刚诞生时(那时的机器非常慢,函数调用的开销也特别大),这个论据也是很脆弱的,到今天它就更无足轻重了。有了新型的机器和编译程序,函数宏的缺点就远远超过它能带来的好处。
所以应该避免函数宏。在C++ 里,在线函数更削减了函数宏的用武之地,在Java里根本就没有宏这种东西。即使是在C语言里,它们带来的麻烦也比解决的问题更多。
函数宏最常见的一个严重问题是:如果一个参数在定义中出现多次,它就可能被多次求值。如果调用时的实际参数带有副作用,结果就会产生一个难以捉摸的错误。
.. note::
时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒。
- 晏殊《采桑子·时光只解催人老》
date命令可以用来打印显示亦或者更改日期和时间。
看看官方的定义如下:
date - print or set the system date and time
用法如下:
1 | $ date [OPTION]... [+FORMAT] |
较常用的OPTION为:
-R
: 显示时区-u, --utc, --universal
:打印或者设置世界协调时-d, --date=STRING
:显示STRING的时间date 命令默认情况下为CST时区,
1 | $ date |
如果加上 -R
参数就可以带上时区,比如我们的东八区
1 | $ date -R |
选项-u, --utc, --universal
可以显示世界协调时
1 | $ date -u |
可以通过不同的参数来格式化日期,这里需要注意的是:不同的大小写代表的是不同的含义
比较常用的日期和时间如下:
1 | # 显示年月日时分秒 |
1 | $ date |
以下是date
命令的不同的格式选项,各选项所代表含义如下:
%D 日期(月/日/年)
%d 一个月中的第几天 (01..31)
%m 月份 (01..12)
%y 年份的后两位 (00..99)
%a 当前语言下星期的缩写 (Sun..Sat)
%A 当前语言下星期的全拼 (Sunday..Saturday)
%b 当前语言下月份的缩写 (Jan..Dec)
%B 当前语言下的月份的全称 (January..December)
%H 24小时制小时 (00..23)
%I 12小时制小时 (01..12)
%Y 年份(1970…)
1 | $date --date=”3 seconds ago” |
1 | $date --date=”3 seconds” |
date命令可以用来打印显示亦或者更改日期和时间。
看看官方的定义如下:
date - print or set the system date and time
用法如下:
1 | $ date [OPTION]... [+FORMAT] |
较常用的OPTION为:
-R
: 显示时区-u, --utc, --universal
:打印或者设置世界协调时-d, --date=STRING
:显示STRING的时间date 命令默认情况下为CST时区,
1 | $ date |
如果加上 -R
参数就可以带上时区,比如我们的东八区
1 | $ date -R |
选项-u, --utc, --universal
可以显示世界协调时
1 | $ date -u |
可以通过不同的参数来格式化日期,这里需要注意的是:不同的大小写代表的是不同的含义
比较常用的日期和时间如下:
1 | # 显示年月日时分秒 |
这里注意到有+这个选项,后面的就是格式字符串,常见常用的有下面几个。
格式化参数 | 含义 |
---|---|
%a | 星期的缩写,比如Sun |
%A | 星期的全称,比如Sunday |
%b | 月份的缩写,比如Jan |
%B | 月份的全称,比如January |
%c | 日期和时间,比如Thu Mar 3 23:05:25 2005 |
%d | 日期,比如02 |
%D | 日期,格式为月/日/年,比如:01/17/13,即为2013年1月17日 |
%F | 日期的全写,格式为年-月-日,比如2013-01-17 |
%H | 小时,从00到23,24小时制 |
%I | 小时,从01到12,12小时制 |
%j | 一年中的第几天,从001到366 |
%m | 月份,比如:01 |
%M | 分钟,比如56 |
%N | 纳秒,范围为:(000000000..999999999) |
%p | 使用AM或PM |
%P | 使用am或pm |
%q | 显示季度(范围1到4) |
%r | 12进制显示,比如:10:23:51 PM |
%R | 24进制显示时分,类似于%H:%M |
%s | 自UTC1970-01-01 00:00:00以来的秒数 |
%S | 秒,比如28 |
%T | 显示时间,格式为:%H:%M:%S |
%u | 一周的第几天,从1到7 |
%U | 一年的第几周,周日为第一天,范围00到53 |
%V | 与%U类似,使用Monday作为第一天,范围01到53 |
%w | 星期,如果结果显示0,则表示周日 |
%W | 一年的第几周,周一为第一天,范围00到53 |
%x | 本地日期,格式mm/dd/yy |
%X | 本地时间,格式hh:mm:ss |
%Y | 以四位数字格式打印年份 ,比如 2014 |
%y | 以二位数字格式打印年份 ,比如14 |
%z | 数字时区,格式为+hhmm |
%Z | 字母时区,比如EDT、CST |
还有一些可选的参数,比如:^,使用方法为date +%^b
,此时的输出改为大写,如果date +%b
输出为Jan,那么加上^的输出为JAN。
下面的方法为将UTC 1970-01-01 00:00:00经过123456789秒以后的日期时间显示出来。
1 | $ date --date='@123456789' |
-d, --date=STRING
能描述和使用的STRING很多很复杂,比如可以这么用:
1 | $ date --date="next Week" |
还有很多其他的用法,可以参考info date
。
1 | #!/bin/bash |
调用系统时后:
1 | #!/bin/bash |
这里注意的地方是 等号两边不要空格
获取系统时间之当前小时的语句是
1 | hours=`date +%H` |
如果想系统时间按格式显示,则可改为
1 | echo `date +"%Y-%m-%d-%H:%M:%S"` |
运行结果为:
1 | 2013-01-17-18:01:08 |
这里需要注意的是:不同的大小写代表的是不同的含义
1 | date +%Y 以四位数字格式打印年份 eg: 2018 |
IF you can not find the network configure.
May be you should TYPE:
1 | system-config-network |
to setting IP info.
import
is a feature provided by the GCC compiler, which is what Xcode uses when you’re compiling Objective- C, C, and C++ programs. #import guarantees that a header file will be included only once, no matter how many times the #import directive is actually seen for that file.
NOTE
In C, programmers typically use a scheme based on the #ifdef directive to avoid the situation where one file includes a second file, which then, recursively, includes the first.
In Objective- C, programmers use #import to accomplish the same thing.
So import equals to ifndef plus include.
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
1 | #include <assert.h> |
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
但是使用assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入
#define NDEBUG` 来禁用assert调用。
我比较常用的比如断言分母不能是0等等。