1. sizeof
const char * st = "1234567890";
sizeof(st); //4
strlen(st); //10
当把sizeof用于字符指针时,得到的是指针大小(4),而不是字符串的大小。这是应该用strlen。
当用字符数组时,注意sizeof会包括结尾的\0。例如:
char st[] = "1234567890";
sizeof(st); //11
strlen(st); //10
2. bool
对bool调用sizeof,结果是1。
3. system调用
当用system调用shell,exit 1,则返回值在C程序里读取是256. 例如:
int rtn = system("exit 1");
int rtn2 = system("exit 2");
printf("%d, %d\n", rtn, rtn2); //256, 512
可以将其右移8位,获得原来的返回值:
rtn = (rtn >> 8);
4. 转换timestamp
#include <time.h>
long inputtime = 1499790377L;
struct tm res;
localtime_r(&inputtime, &res);
printf("%d-%d-%d %d:%d:%d\n", res.tm_year+1900,res.tm_mon+1,res.tm_mday,res.tm_hour,res.tm_min,res.tm_sec);
5. 数组的地址操作(32位系统)
#include<stdio.h>
int main()
{
int a[10];
printf("%x\n%x\n%x\n%x\n%x\n",a, &a+1, a+sizeof(int), (int*)&a + 1, (int*)((char*)&a+sizeof(int)));
return 0;
}
bffa8e90
bffa8eb8
bffa8ea0
bffa8e94
bffa8e94
"a"表示数组的地址;
&a+1,a的类型是10个元素的int数组,size是40。+1表示下一个"10元素int数组"的地址,所以+40。
a+4是第4个元素的地址,所以+16。
转成int*后,a的类型是int指针,+1表示下一个这种类型的地址,所以+4。
转成char*后,+4就是原地址+4。