2011-11-10 29 views
1

私のC言語プログラムでchdir()に問題があります。私は自分のコードを削除しました。このようなC言語でchdir()に変数を渡す(Linux)

何かが正常に動作します:

chdir("/Documents"); 

私はそれが動作するように望んでいない変数としてそれを渡すようにしてみてください。

char *home_directory; 
home_directory = malloc(80); 
chdir(home_directory); 

ホームディレクトリは、コードの他の場所からファイルから読み取られます。必要に応じて、これを行った方法を投稿できます。

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

+4

技術的アイデアを仲間に正確に表現する能力の最も優れたデモンストレーションは「動作したくありませんか? –

+1

(1) 'home_directory'を埋め込むコードを投稿してください。 (2)Linuxで実際に何が失敗するのか? – jpalecek

+0

私はあなたが 'malloc'と' chdir'の間のホームディレクトリを読むことを期待していますか?パスには79文字で十分ですか? –

答えて

6

ファイルからhome_directoryを読み込んでいるので、末尾の改行文字やその他の疑似文字を削除してから、chdirのパラメータとして使用するのは忘れてしまいますか?

+0

私は問題がこれほど些細なものであることを知っていました。 ご協力いただきありがとうございます。 –

+0

@ user1038788:これが正解であれば、どうして投票しなかったのですか? –

+1

「投票には15の評判が必要です」 私はこれを受け入れたとマークしました。 –

2

このようなエラーチェックを試行してください。

char *home_directory; 
home_directory = malloc(80); 
/* ...fill the home directory... */ 
if (chdir(home_directory) == -1) 
    perror("chdir"); 

...、その後man chdirでヨーヨーは、エラーコードの意味を調べることができます。

+0

'errno'はほぼ確実に' ENOENT'になります。 –

+1

確かに、あなたのエラーコードをチェックしていないのは本当に悪い習慣ではないと不平を言ってもらえません。仕事...あなたはシステムコールが失敗しているたびに人々がstraceで周りにいることはほとんど想像できません。 – Soren

1

chdirはLinuxのシステムコールであるため、straceプログラムを使用して、実際にプログラムが実際に行っていることを確認できます。それはあなたのコードの中でエラーをあらかじめ処理することから解放されません。明らかに。あなたのプログラムが取る行動に従うのに役立ちます。

関連する問題