2017-03-13 14 views
-3

モールスコードを出力するCプログラムを作成したいが、後で私が使用できるように、Yの値を返すのに問題があるその値をYと比較して別の基本文字列と比較して答えを表示します。私も疑問があります。あなたが答えを知っているかどうかを明確にしてください。長さパラメータをグローバルにすると、main関数からの入力長の値はそのパラメータに格納されますか?おかげで事前にC:関数から数値の配列を返す方法

int length; 

int *callfunction(int x){ 
    int temp=x; 
    int Y; 
    static int r[1000]; 

    if(temp==0 || temp==1){ 
     Y=1; // for a 
    } 
    else if(temp==2 || temp==3){ 
     Y=2; //for b 
    } 
    else if(temp==4 || temp==5){ 
     Y=3; //for c 
    } 
    else if(temp==6 || temp==7){ 
     Y=4; // for d 
    } 
     for(int i =0;i<length;i++){ 
     r[i]=Y; 
    } 
    return r; 
} 

int main(){ 
    int i,j,k,*p[1000]; 
    char string[100]; 
    char string1[]={'A','a','B','b','C','c','D','d'}; 
    const char* string2[]={"•-","-•••", "-•-•","-••"}; 
    printf("Enter a string:"); 
    gets(string); 
    printf("The entered string is:%s\n",string); 
    length= strlen(string); 
    printf("Length=%d\n",length); 

    for(j=0;j<length;j++){ 
     for(i=0;i<8;i++) 
      if(string1[i]==string[j]){ 
       p[i] = callfunction(i); 
      } 
     } 
     for(i=0;i<length;i++){ 
      printf("%d",p[i]); //I want display the Y number here 
      printf("\n"); 
     } 

    getchar(); 
    return 0; 
} 

プログラムがエラーなしで実行しますが、私は実行が行われているYの実際の値を得ることはありません、

+1

本当に配列を返すことはできません。 –

+0

静的配列上の壊れたポインタを返すことができます。それはうまくいきます(しかし、私はそうしません:)) –

+1

関数内のバッファは静的で、すべての 'p [i]'によって参照される* 1つのバッファしかないので、考慮してください。 '%d 'ここで' printf( "%d"、p [i]); 'でポインタを印字しようとしたので意味のある印字は得られません。配列を印刷するには、配列を反復処理する必要があります。 – StoryTeller

答えて

0

p[i]を助けてください、配列へのポインタではありません価値。

最も簡単な解決策はなく、intへのポインタの配列のintの配列であることがpを再定義することである。

int p[1000]; 

そして(最初の要素へのポインタとして)アレイを取る関数を再定義引数として配列の長さ:

void callfunction(int x, int *r, size_t length){ ... } 

は、次に必要な引数を渡す関数を呼び出します

callfunction(i, p, length); 
関連する問題