Предупреждение: нижний индекс массива находится выше границ массива [-Warray-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, я видел несколько вопросов по этому поводу, но это мне не очень помогло

2 ответа

Ваше самое начало printf указывает три %s для трех строк, но вы предоставили только одну строку для этого printfи так крушение.

Примечание от комментария Weather Vane:

Помните, что компилятор 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 seconds\n"
             "Option 2: %c for mili seconds\n"
             "Option 3: %c for seconds\n", 
              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: %c\n", period);
        printf("Time Period: %d\n", time);

    } else {
        printf("\nIncorrect unit of time entered.\n");
    }

    return 0;
}
Другие вопросы по тегам