Xcode では、(具体的には C または C++ で) ファイルを使用するときはいつでも、ファイルへのフル パスを指定する必要がありますが、gcc または g++ では、コードと同じディレクトリにある場合は指定する必要はありません。それを参照しています。
これには理由がありますか?もしそうなら、それを修正する方法はありますか?
問題は、「XCode」が相対パスを受け入れないことではありません。問題は、コードの現在の作業ディレクトリが、考えているものとは異なることです。コメントにあるように、 を使用chdir
してファイルのある場所に移動するか、現在の作業ディレクトリを考慮した相対パスを使用できます (getcwd()
現在の作業ディレクトリを取得するために使用できます)。
コマンド ラインでgcc
またはを使用している場合、最終的なアプリケーションが実行されるディレクトリを制御できます。g++
その理由は、「現在の作業ディレクトリ」という概念があるためです。したがって、あなたの fopen() などはそこから始まります。Unix では、シェルから、CWD が現在のディレクトリになります。MacOS のターミナル ウィンドウからコマンド ライン ツールを起動する場合も同様です。しかし、Xcode から開始するか、アプリを起動すると、CWD は別の場所にあります。
コメントで述べたように、呼び出しchdir()
て現在の作業ディレクトリを開始したい場所に変更できます。その場合、フルパスを指定する必要はありません。