Initialiser元素不是常量

时间:2013-11-10 09:04:26

标签: c linux-device-driver

#include<linux/fs.h>
#include<linux/uaccess.h>
#include<linux/slab.h>
#include<linux/gfp.h>
//#include<linux/types.h>

//#include<linux/kernel.h>
//#include<linux/module.h>

char *my_buff = (char*)kmalloc(100,GFP_KERNEL);
char *buff = "Linux Device Drivers programming!";

这是该计划的一部分。我收到一个错误,因为“Initialiser元素不是常数”。 无法找出可能导致错误的原因。

2 个答案:

答案 0 :(得分:2)

您的变量my_buff超出了函数范围,您正在从非常量结果初始化它,即kmalloc的返回值。你不能这样做 - 你需要在使用它之前调用某个函数初始化my_buff,或者使初始化程序成为编译时常量(如果是的话,可能不可能)一个指针,虽然您可以将其更改为char my_buff[100])。

答案 1 :(得分:2)

您正在初始化静态成员,意味着编译器需要知道编译时的值是什么。您正在尝试在编译时分配编译器不可知的值,但在运行时知道导致错误的值。尝试在下面的函数中分配它,

char *my_buff;
main()
{
    my_buff = kmalloc(100,GFP_KERNEL);
    ...
}
相关问题