警告:数组下标在模块中的数组边界[-Warray-bounds]之上

时间:2016-10-30 11:00:14

标签: c arrays for-loop printk

sudo ln -s libmysqlclient.so.20.3.2 libmysqlclient_r.so.16

我正在编写一个简单的模块来接受一些命令行输入。在编译时它会发出警告

static int myarray[2]={-1,234};
module_param_array(myarray,int,&arrayargc,0);
MODULE_PARM_DESC(myarray,"Integer Array");

static int __init module_init_2(void)
{
 int i;
  for(i=0;i< (sizeof myarray/sizeof(int));i++);
{

printk(KERN_INFO "myarray[%d] is %d",i,myarray[i]);

}

为什么它会发出警告,因为循环似乎一直运行到i = 2,我看到了一些关于此的问题,但这对我没那么帮助

2 个答案:

答案 0 :(得分:3)

您的开头printf为三个字符串指定了三个%s,但您只为该printf提供了一个字符串,因此崩溃。

来自Weather Vane评论的注释:

请记住,C编译器将连接仅由空格分隔的字符串文字。

这意味着即使您在三行中分别写了三个“选项#1”,“选项#2”等,它们仍然只计算为一个字符串(连接后)。通过添加修复每行末尾的逗号以防止连接(因此你有三个单独的字符串)。

答案 1 :(得分:0)

你可以试试这个。我假设您要输出两个成功读取的值。

0