質問: C言語でカレントディレクトリを取得する方法が分からなくて困ってます。 環境は、Windows10、Visual Studio 2017です。 調べたところ、C言語だとgetcwd関数でカレントディレクトリを取得することができるとわかりました。 しかし、そのためにはuninsd.hをインクルードする必要があると参考のサイトを読むと書かれてありましたが、Visual Studioを使った環境だとuninsd.hをインクルードすることができませんでした。 以下のサイトの170票ほど入っているソースをuninsd.hとしてコピペしてuninsd.hをVisual Studio 2017にインクルードしようとしてますが、#include の箇所で、「ソースファイルが開けません。」というエラーが出てました。 170票ほど入っているソースがある参考サイト: 上記エラー解決のため、以下のサイトのgetopt.cとgetopt.hをコピペしてそれぞれファイルを作成しましたが、 getopt.c の# include でソースファイルが開けません。」というエラーが出ており、これをどうやってインクルードするのかわかりませんでした。 getopt.cとgetopt.hをコピペ元サイト: どうすればC言語でカレントディレクトリを取得できるのか教えて頂けるとありがたいです。 どうかよろしくお願いいたします。
回答: 質問文には`getcmd`(cmd; command?)とありますが`getcwd`(cwd; current working directory)の誤りではありませんか? Visual Studio 2005以降、 > > * POSIX 名が非推奨とされ、ISO C++ に準拠する名前が使われるようになりました (たとえば、getch ではなく _getch を使います)。 > > > となっており`getcwd`ではなく`_getcwd`を使うことになっています。しかし引き続き`getcwd`も互換のために残されており、現在でも使用可能です。ただし、 ``` warning C4996: 'getcwd': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getcwd. See online help for details. ``` という警告が表示されます。加えて、Visual Studio上で新規にプロジェクトを作成するとコンパイルオプション/sdl (追加のセキュリティ チェックの有効化)が指定されているため、警告でなくエラーとなってしまいます。 いずれにしてもC4996のヘルプにコンパイルオプション`/D_CRT_NONSTDC_NO_WARNINGS`もしくはマクロ`_CRT_NONSTDC_NO_WARNINGS`を指定すればコンパイルできるとあります。 ~~が、今試してみると**バグっていてコンパイルできません**ね...。おとなしく、`getcwd`のドキュメントで紹介されているように`_getcwd`を使用することをお勧めします。~~ 確認手段を誤っていました。現在でも`getcwd`は利用可能です。コンパイルオプション`/Za`言語拡張機能の無効化を付けているとコンパイルできなくなるようです。