小编Yan*_* fr的帖子

为什么这个C代码可以正常运行?

C代码喜欢这个:

 #include <stdio.h>
 #include <unistd.h> 
 #define DIM(a) (sizeof(a)/sizeof(a[0])) 
 struct obj
 {
     int a[1];
 };
 int main()
 {
     struct obj *p = NULL;
     printf("%d\n",DIM(p->a));
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

这个对象指针pNULL,所以,我认为这p->a是非法的.但是我已经在Ubuntu14.04中测试了这段代码,它可以正确执行.所以,我想知道为什么......


注意:原始代码在int a[0]上面,但我已经改变了,int a[1]因为每个人似乎都挂在那而不是实际的问题,这是:

sizeof(p->a)当表达式p等于时,表达式是否有效NULL

c

24
推荐指数
3
解决办法
2092
查看次数

如何在Linux Kernel 4.2中获取当前进程的UID和EUID?

正如LDD3第6章p175所示,我们可以通过current->uid和获取当前进程UID和EUID current->euid.但是,定义struct task_structLinux内核4.2的不包含由命名字段uideuid更多.所以,我想知道是否有其他方法可以获得UID和EUID?谢谢!

linux-device-driver linux-kernel

4
推荐指数
1
解决办法
5044
查看次数

标签 统计

c ×1

linux-device-driver ×1

linux-kernel ×1