2017-12-19 17 views
0
void read_char_from_file(FILE *fp, int formatted) 
{ 
    char sChar[16], eol; 
    int col=0, row=0,ind=0,count=0; 
    char *str2D[4][4]={{ "NULL" }}; 
    while ((fscanf(fp, "%s%c", sChar,&eol)) != EOF) 
    { 
     if(eol!='\n') 
     { 
      str2D[row][col]=sChar; 
      printf("Row: %d, Col: %d = %s\n",row, col,str2D[row][col]); 
      col++; 
     } 
     else { 
      str2D[row][col]=sChar; 
      printf("Row: %d, Col: %d = %s\n",row, col,str2D[row][col]); 
      row++; 
      col=0; 
     } 
     str2D[row][col]=0; 
    } 

    int i,j; 
    for (i=0; i < 3; i++) 
    { 
     for(j=0; j <3; j++) 
     printf("%s",str2D[i][j]); 
    } 

} 

上記のコードは、前の配列の内容のすべてを上書きするstr2Dの最後の要素を表示しています。 sCharを文字列の2次元配列にコピーする必要があります。前の配列要素を上書きする文字列の2D配列の最後の要素

+1

'{{" NULL "}};'!= {{NULL}}; ' –

+0

4x4行列の内容が初期化文の後になるものと思われるものは' char * str2D [ 4] [4] = {{"NULL"}}; '。私はあなたの期待が満たされていないと確信しています。 – bruceg

答えて

0

短い答え:

あなたですないコンテンツをコピーにメモリの場所はあなただけsCharへのポインタポイントを作っている、str2D[row][col]で指されます。したがって、sCharの最新の内容は何でも表示されています。

長い回答:

その他の問題があります。まず、

  • {{ "NULL" }};{{ NULL }};
  • あなたはポインタの2次元配列を作成していると同じではありません。ポインターが指し示すメモリ位置に何かを格納する前に、それらが有効な場所を指していることを確認する必要があります。
+0

sCharをstr2Dにコピーするにはどうすればよいですか? –

+1

@FahadNaeemあなたは1)ポインタにメモリを割り当てる必要があります。2) 'strcpy()'を使って内容をコピーします。 –

関連する問題