2016-10-30 3 views
2

値:
1. main.cのを
2. testarray.c
3がheader.hエラーは、私は3つのファイルだ

私はグローバル変数名を作成したいです'arrayTwoD'は2次元配列です。 'testarray.c'で配列を初期化し、値を 's'で埋めたいと思います。この関数は 'main.c'で呼び出されます。

は、ここに私のコードです:

headerfile.h

#include <stdio.h> 

void iniTwoDArray(); 

/*global variable 2d array not sure im doing correctly or not*/ 
extern char *arrayTwoD[2][3]; 


testarray.c

#include "headerfile.h" 
#include <stdio.h> 

char *arrayTwoD[2][3]; 

void iniTwoDArray() { 
    /*not sure if this is a good way to set the values */ 
    memset(arrayTwoD, 's', sizeof(arrayTwoD[0][0]) * 2 * 3); 
    for (int i = 0; i < 2; i++) { 
     for (int j = 0; j < 3; j++) { 
      printf("%c", arrayTwoD[i][j]); 
     } 
     printf("\n"); 
    } 
} 


main.cの

#include "headerfile.h" 

int main() { 
    iniTwoDArray(); 
    return 0; 
} 

testarray.cに、デバッグしている間、th下の行は、実行された後、「文字列の文字の読み込みエラー」を表示し続けます。エラーは以下のスクリーンショットに示されています。私はちょうどCを学び始めました。あなたが私に説明することができれば本当に感謝します。

memset(arrayTwoD, 's', sizeof(arrayTwoD[0][0]) * 2 * 3); 

enter image description here

+1

[2] [3]をちょうど何ができますか? 'char * array ... 'ではありません。 –

+2

' char * arrayTwoD [2] [3];は '* char'の*ポインタ*の2次元配列です。 '*'を省略すると、 'char'の2次元配列になります。 –

+1

'char * arrayTwoD [2] [3];'は、 'char * 'の2次元配列であり、' char'ではなく 'pointers *'のものです。星を気にする。 – alk

答えて

0

それは賢い\役に立つことしようとしているデバッガだ - それは文字のあなたの配列を見て、それが文字列であると仮定しています。 autoのウィンドウを見るのではなく、時計を使ってみてください。変数をより良く\正しくデコードするかもしれません。

はFYI:; `あなたは`文字arrayTwoDことになっているのmemset(arrayTwoD、 'S'、はsizeof(arrayTwoD))

+0

ありがとう!それは私が直面している別の問題を解決します。 sizeof(arrayTwoD [0] [0])* 2 -1 * 3 -1何らかの理由で、そこから整数を引いたものはありません。なぜあなたは知っていますか?次に、アレイに時計を追加しようとしました。それでもエラーが表示されます。 – ysj

+0

*あなたの文字の配列を見て、それが文字列であると仮定しています* "文字の配列"と "文字列"の間に違いはなく、コンパイラは気にしません。 Askerは初期化されていないポインタを使用していて、クラッシュします... –

関連する問題