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