0

ここで髪を引っ張っています。Cプログラミングを始めてから約1.5年になりますので、ご容赦ください。

Linuxでpwd関数が行うことを行う関数をcで作成する必要があります。フォルダーを表すノードの構造体があります。それぞれがその親に戻るポインタを持っているので、それはかなり簡単なはずですが、私はここで死んでいます. strcat を使い続けて、ノードの親の名前をパス名に追加できると思いました。しかし、これを機能させることができたとしても、逆のリストが残るでしょう。これは問題ないと思います。私は少なくともそれに対処することができました。しかし、親が b で、親がルートである a のディレクトリ c にいる場合、pwd を使用して文字列「/a/b/c」を出力できるはずです。私は立ち往生しています。何か案は?strcat を使用しようとすると、陰陽でセグメンテーション違反が発生します。

void pwd( ){  

    char *thePath;
    NODE *nodePtr;
    nodePtr = cwd;

    while( nodePtr != root ){

    }
    printf("%s\n", thePath);
    return;
}   
4

1 に答える 1

1

パスを出力するだけなら、再帰を使えばかなり簡単です。

void pwd_recurse (NODE *nodePtr)
{
    if (nodePtr == root)
    {
         return;
    }
    pwd_recurse(nodePtr->parent);
    printf("/%s",nodePtr->name);
}

void pwd()
{
    ///however you get the nodePtr;
    pwd_recurse(nodePtr);
    printf("\n");
}

これにより、メモリ割り当てを処理する必要がなくなります (ただし、ループを含む縮退したファイルシステムがある場合 (必須の XKCD 漫画をここに挿入)、スタックオーバーフローが発生することになりますが、これは無限ループよりも優れていると言えます)。

于 2013-01-27T17:08:06.803 に答える