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