0

文字列パスを含むテキスト ファイルを適切に取得し、リンク リストを適切に実装しましたか? そのため、後で検索機能を作成して、ファイルがそこにあるかどうかを確認できます。

テキストファイル: path.txt

a/a1.txt
a/a2.txt
a/b/b3.txt
a/b/b4.txt
a/c/c4.txt
a/c/c5.txt
a/c/d/d6.txt
a/c/d/g
a/c/d/h
a/c/e/i/i7.txt
a/c/f/j/k/k8.txt

コード

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct sMyPath{
        char *element;
        struct sMyPath *next;
} tMyPath;


int main(void)
{
        FILE *pFile;
        pFile = fopen("path.txt", "r");
        char inputstr[1024];
        tMyPath *curr, *first = NULL, *last = NULL;

//get the text file, and put it into a string inputstr

    if (pFile != NULL)
    {
            while(!feof(pFile))
            {
                    fgets(inputstr, sizeof(inputstr), pFile);
            }
    fclose(pFile);
    }
    else
    {
            printf("Could not open the file.\n");
    }

//トークンを使用して文字列の各部分を取得する //ディレクトリとテキスト ファイルを分離し、リンク リストに入れる

    char *token = strtok(inputstr, "/");
    while (token != NULL)
    {
    if(last == NULL){
            //creating node for directory
            first = last = malloc (sizeof (*first));
            first -> element = strdup (token);
            first -> next = NULL;
    } else {
            last -> next = malloc (sizeof (*last));
            last = last -> next;
            last -> element = strdup (token);
            last -> next = NULL;
    }
    token = strtok(NULL, "/");
        }

return 0;
}
4

1 に答える 1

2

指定されたリストにファイルが存在するかどうかを調べるこのプログラムを検証する必要があると思います。以下の理由を除いて、これは私にとっては問題ないように見えますが、

1)リンクされたリストには、次のようなディレクトリの重複エントリが多数含まれます。

a, b, c, d....

区切り文字は「/」です。これが期待どおりかどうかはわかりません。 区切り文字を「\ n」にすることで、目的をよりよく果たすことができます..

2) ファイルサイズは固定です。ファイルの統計を実行し、 file-data を保持するためにメモリを割り当てることをお勧めします。

3) strdupによって返されたメモリを解放します。

于 2013-05-04T22:07:20.767 に答える