2012-02-07 4 views
0

CHANNELSのchar配列に適切な値が格納されていません。私は本当にそれが私の指針では簡単な問題になると思う。私はあなたがchar * CHANNELS [6]を宣言するときにポインタの配列を作成していることを理解していると思います。だから私は私のスイッチ文でケース1のチャネルを通過する第3引数で私は適切な価値を戻していない。どんな助けも素晴らしいです!いくつかの背景:6つのバイナリ値を持つ6つの "チャンネル"を読み込んでいます。char *配列を別の関数に渡すと、ポインタの問題が発生する

void binEnter(void *channel, char *CHANNELS[6], int i){ 
redo: 
    printf("Enter binary value for Channel %d: ",i); 
    scanf("%s",(UCHAR *)channel); 
    if (strlen(channel)!=6) { 
     printf("Error entry must be six digits!\n"); 
     goto redo; 
    } 
    char *string = channel; 
    int j; 
    for (j = 0; j < 6; j++){ 
     if ((string[j] != '0') && (string[j] != '1')){ 
      printf("Error did not enter a binary number!\n"); 
      goto redo; 
     } 
    } 
CHANNELS[i]=channel; 
printf("Channel %d is stored as %s\n",i,CHANNELS[i]); 

}

int main(){ 
int selection; 
UCHAR channel0; 
UCHAR channel1; 
UCHAR channel2; 
UCHAR channel3; 
UCHAR channel4; 
UCHAR channel5; 
char *CHANNELS[6]; 
float vRefVal[6]; 
//char *data[5]; 
float volt =0; 
do { 
start: 
    promptUser(); 
    scanf("%d",&selection); 
    switch (selection) { 
     case 1: 
      binEnter(&channel0, CHANNELS,0); 
      binEnter(&channel1, CHANNELS,1); 
      binEnter(&channel2, CHANNELS,2); 
      binEnter(&channel3, CHANNELS,3); 
      binEnter(&channel4, CHANNELS,4); 
      binEnter(&channel5, CHANNELS,5); 
      int i; 
      for (i=0; i<6; i++) { 
       printf("Channel %d is %s in main\n", i, CHANNELS[i]); 
      } 
      goto start; 

     case 2: 
      goto start; 
     case 3: 
      enterVolt(&volt); 
      printf("Volt = %f\n",volt); 
      goto start; 
     case 4: 
      if (volt) { 
       vRefCal(&volt, CHANNELS, vRefVal); 
       printVref(vRefVal); 
       goto start; 
      } 
      else{ 
       printf("Must enter input Vref first!\n"); 
       goto start; 
      } 
     default: 
      break; 
    } 
} while (selection!=5); 
return 1; 
} 

答えて

0

UCHAR channel0;

あなたはbitEnterのプロトタイプがvoid binEnter(void *channel, char *CHANNELS[6], int i)

ある

binEnter(&channel0, CHANNELS,0);

として渡されています

しかし、その後、あなたが行う:あなたはそれを文字列として処理しようとしている場合scanf("%s",(UCHAR *)channel);

  1. なぜあなたはvoid *としてそれを渡すのですか?
  2. 文字列を入力しようとしています。文字列の型はUCHARです(符号なし文字と仮定します)。これを行うと、channelに格納されているアドレスの基底からメモリが上書きされ、上書きされる自動変数にどのようにメモリが割り当てられたかによって、未定義の動作が発生します。

bitEnter機能で文字列あなたの入力を割り当てる動的に試してみて、それがCHANNELSに追加しますか?

関連する問題