2016-11-14 11 views
0
char t[] = {'a','b','$'}; 
char nt[] = {'S','A'}; 
char table[2][3][2] = { {"AA","AA",""}, {"aA","b",""} }; 

void main(){ 

    printf("%s",table[0][0]); 
} 

出力:三次元文字配列へのアクセス

AAAA

出力は、AAあるべき誰かが問題を把握することはできません、私を助けることができます。

+2

あなたの質問は、実際の質問を欠いのようなパラメータなしでmain関数がCで定義されなければならないことを考慮してください。 「誰かが助けてくれる?」は、SOの形式ではありません。 – StoryTeller

+0

[ポインタの配列変換へのポインタ]の可能な複製(http://stackoverflow.com/questions/25956999/pointer-to-array-convertion) – StoryTeller

答えて

1

アレイにヌルターミネータのためのスペースがありません。 tableの最も右のディメンションは、要素をC文字列として使用するには、少なくとも3でなければなりません。 undefined behaviourであるprintf()%sを使用して印刷すると、配列の範囲外にアクセスしています。

char table[2][3][3] = ... 

同様に、文字列リテラルの長さを長くする場合は、長さを調整します。

Btwのvoid main()は、main()の標準シグニチャではありません。 int main(void)などを使用してください。

+0

ありがとう、それは働いた! –

0

あなたはサブアレイテーブルのないすべての要素を見ることができるように実際には、配列表のあなたの宣言は次の宣言

char table[2][3][2] = { { { 'A', 'A' }, , { 'A', 'A' },, { '\0', '\0' } }, 
         { { 'A', 'A' }, { 'b', '\0' }, { '\0', '\0' } } }; 

と等価である[I] [J] iとjいくつかのインデックスが文字列を含みます。したがって、このようなサブ配列の要素を出力するには、出力する文字数を正確に指定する必要があります。あなたはここに

次のようにその
printf("%*.*s\n", 2, 2, table[0][0]); 

を行うことができ、アレイは、その文字列が含まれている場合、それは非常に良いだろうしかし、プログラムの出力が

4 
AA AA  
aA b 

ある

char table[2][3][2] = { {"AA","AA",""}, {"aA","b",""} }; 

for (size_t i = 0; i < 2; i++) 
{ 
    for (size_t j = 0; j < 3; j++) printf("%*.*s ", 2, 2, table[i][j]); 
    printf("\n"); 
} 

より完全な例です。終端ゼロのための部屋があったということです。

たとえば、配列が文字列リテラルで初期化されるときに終端ゼロの余地がない場合、C++ではそのような文字配列の定義を許可しません。コンパイラは配列を発行します。

このように、アレイに次のように宣言

char table[2][3][3] = { {"AA","AA",""}, {"aA","b",""} }; 
       ^^^^^ 

int main(void) 
関連する問題