2016-10-30 1 views
0
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]); 

} 

は、それは警告を与えている警告:配列の添字が配列の境界上にある[-Warray-境界]モジュールで、私はいくつかのコマンドラインinput.Duringコンパイルを取るために、単純なモジュールを書いています

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

なぜそれは私が2まで実行されるように警告が出ている、私はこれに関するいくつかの質問を見たが、それはそれほど助けにはなりません

+1

あなたは忘れてしまいました'' Option#N ... "'文字列の間のカンマ。Cは単一の文字列として扱います。typoとして閉じるために投票します。 – dasblinkenlight

+0

何が間違っているのかを警告することなくコンパイルしません。 –

+0

私はそれを正しかった。今問題は、プログラムがオプションを出力し、m = getcharをバイパスして、次のprintfに直接ジャンプすることです。理由を教えてください。 –

答えて

3

あなたの非常に始まりprintfは3つの文字列の3つの%s、そのための文字列printfなど クラッシュ。天気ベーンのコメントから

注:

は、Cコンパイラが空白のみで区切られた文字列リテラルを連結することを覚えておいてください。あなたは、彼らはまだ連結後だけ文字列(とカウント三行になど3つの別々の「オプション#1」、「オプション#2」を、書いていても意味

。でカンマを追加することによって、これを修正各行の終わりには連結を防ぐために(そしてあなたが3つの別々の文字列を持っていると思います)。

+0

はい、あなたは正しいです、私はOPの問題をはるかに明確に説明する必要がありますあなたのコメントを追加しました。 – artm

+1

私は初心者があなたが考えることのない「創造的な」バグを生み出す方法が好きです。ほぼ芸術。 –

+0

私はそれを正しかった。今問題は、プログラムがオプションを出力し、m = getcharをバイパスして、次のprintfに直接ジャンプすることです。理由を教えてください。 –

0

あなたはこれを試すことができます。私はあなたが出力に正常に読み込まれ、両方の値をしたいと仮定。

#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; 
} 
関連する問題