• ベストアンサー

D言語の連想配列

D言語で以下のプログラムが動いてくれません。 なにがおかしいのでしょうか。 int main(char[][] args) { int[char[]] a; a["abc"]=1; a["def"]=2; a["ghi"]=3; char[][] x=a.keys; for(int i=0;i<x.length;i++) printf("%s\n",x[i]); return 0; } 実行結果 Error: Access Violation

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

D言語では配列の内部表現がC言語とは異なります。 char[]の場合、先頭の4バイトに要素数が格納され、続いて配列の実体のアドレスが格納されています。 今回の場合、 printf("%s\n",x[i]); のところでアクセス違反が発生しています。 これは、C言語から見れば、あたかも printf("%s\n", x[i].length, x[i]); のように、引数が3つ渡されたのと同等になります。 これを解決するには、 printf("%.*s\n", x[i]); とすればよい旨がマニュアルに記載されています。 ただ、今後CPUのアーキテクチャが異なる環境や、可変個引数のコーリングコンベンションが異なる環境にD言語が移植されると、必ずしも成立しないような気もしますが、現状ではこれで十分かと思います。

参考URL:
http://www.kmonos.net/alang/d/interface.html
nagata20000
質問者

お礼

解決しました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A