1.今天在调试的时候发现,只要打开我们写的某些打印,就会导致机顶盒死机,最后发现问题在于printf sprintf vsprintf vsnprintf等打印函数,比如 int a =100;vsprintf(buffer,"a=%s",a);类似这样的格式传错的调用,就有可能引起程序崩溃,查了一下,有前人的经验:

综合以前的经验得出这就是printf %s 时给了一个非字符串变量,导致访问到了不该访问的地方(把int型变量看

成了指向字符串的指针变量了),内核结束的程序。

 

我的理解是,使用%s的时候,后面传的参数应该是一个指针,然而传了个×××的数后,比如int a=100;就会是printf去从地址为100的地方解析它所理解的字符串,直到遇到'\0',当然该地址是不该被访问的。所以出错了。

2.最近看到了void fun(int a){ char *prt=(char *)a;}类似这样的函数,开始很想不通,今天问了下领导,茅塞顿开: a 4个字节,指针也是4个字节,int a=100; (char *)a也等于100;只不过他的意思是指向地址100。即prt为一指向地址100的指针。那么*prt等于多少那?这个无从得知,只能打印出来才能知道了。。对于指针,其实你认为它的值是个地址,他就是地址,你认为他的值可以是一个数,他也可以是一个数,只要你认为他是一个数的时候,不要去做*prt这样的操作。