2012-03-16 2 views
2

opendir()を使用している間、私はいくつかの好奇心の結果を受けてきました:opendir(pathname)は入力パス名の値を変更できますか?

int dtw(char *path) { 

    struct stat statbuf; 

    ... 

    else if (S_ISDIR(statbuf.st_mode)) { 
      printf("Path is: %s\n", path); 

      struct dirent *dirent; 
      DIR *dirp; 

      if ((dirp = opendir(path)) == NULL) { 
       puts("Can't open directory."); 
       return -1; 
      } 

      printf("Path is: %s\n", path); 
    } 

    ... 
} 

の結果に:

Path is: /home/.../etc 
Path is: 

pathに影響を与える唯一の事はここにopendir()です。それは私が見ていない副作用がありますか?それとも仕事に何か他に何かありますか?

+1

'path'を宣言して初期化しましたか? – sarnold

+0

'path'はコマンドラインから解析され、最終的に' main() 'から関連する関数に渡されます。それを反映するように編集された質問。 – Cody

答えて

3

変更できません。 opendir()の定義は次のとおりです。

DIR *opendir(const char *dirname); 

そしてconstopendir()がそれを変更していないと言います。

pathが解放されたメモリへのポインタであるのだろうか?その場合、メモリはopendir()に割り当てられている可能性があります。あなたが見てはならないメモリへのぶら下がりポインタを使用しているため、変更が反映されていますか?

+0

ああ、それはまさにそれです。 JavaからCに切り替えて以来、この種の問題に遭遇したのは初めてです。どうもありがとうございます。 – Cody

関連する問題