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


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]);
}

我正在写一个简单的模块来接受一些命令行输入。在编译过程中,它给出一个警告

warning: array subscript is above array bounds [-Warray-bounds]
printk(KERN_INFO "myarray[%d] is %d",i,myarray[i]);

为什么它给出警告,因为循环似乎运行到i=2,我看到一些问题,但这并没有帮助我这么多

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

《风向标》注释:

请记住,C编译器将只以空格分隔的字符串字面值连接起来。

这意味着即使你在三行中写了三个单独的"选项#1","选项#2"等,它们仍然只算作一个字符串。通过在每行末尾添加逗号来解决这个问题,以防止连接(因此您将有三个单独的字符串)。

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

#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char const *argv[]) {
    int period, time;
    const char micro_sec = 'u';
    const char mili_sec = 'm';
    const char sec = 's';
    printf("nSelect unit of Time period: n");
    printf("nOption 1: %c for micro secondsn"
             "Option 2: %c for mili secondsn"
             "Option 3: %c for secondsn", 
              micro_sec, mili_sec, sec);
    printf("nEnter unit of Time Period: ");
    period = getchar();
    if (period == micro_sec || period == mili_sec || period == sec) {
        printf("Enter Time Period: ");
        if (scanf("%d", &time) != 1) {
            printf("Error reading time!n");
            exit(EXIT_FAILURE);
        }
        printf("nUnit of time: %cn", period);
        printf("Time Period: %dn", time);
    } else {
        printf("nIncorrect unit of time entered.n");
    }
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新