realpath
関数で奇妙な問題が発生しました。この関数は、プログラムの引数として受け取った文字列が与えられたときに機能しますが、ソースコードで定義した文字列が与えられたときに失敗します。ここでは単純なプログラムです:ソースファイルに定義されている文字列のC realpath関数が機能しません
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(argv[1], fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
私は(file
は、通常のファイルを存在している)引数でこれを実行すると、私が期待される出力に
/home/<username>/Desktop/file
を取得ここで、プログラムの別のバージョンは以下のとおりです。
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
const char* path = "~/Desktop/file";
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(path, fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
私はこのプログラムを実行すると、私は、出力
を取得10Failed
なぜ2番目のエラーは失敗しますか?
あなたの質問とは無関係ですが、なぜ 'fullpath'を動的に割り当てるのですか?なぜ配列ではないのですか? –
あなたの問題については、それが何であるかを見るために 'argv [1]'を印刷してみましたか?呼び出しが失敗したときに 'errno'をチェックしますか?また、[realpathのマニュアルページ](http://man7.org/linux/man-pages/man3/realpath.3.html)を読むことをお勧めします。 –