0

char*をstrcatしようとしています。しかし、私は問題に気づきました。

struct d{
    struct d* up   //parent
    char *path     //path to d
    char *name     //path + breadth = name
}

for(j=0; j<b;j++){
    struct d* breadth_p;
    breadth_p=malloc(sizeof(struct d));
    char buffer[256];
    snprintf(buffer, sizeof(buffer), "/%d", j)   //prepares buffer to have "/j"
    breadth_p->up=cur_parent;
    breath_path->path=cur_parent->up->name;
    breadth_name=strcat(breadth->path, buffer);
    printf("name: %s\n", breadth_p->name);
    free(breadth_p);
}

つまり、cur_parentの名前とパスをrootとして渡し、bを3として渡すとします。次のように出力されます。

root/0
root/0/1
root/0/1/2

私はbreadth_pを正しく解放しなかったと想定しているので、以前の名前を連結しています。

私が期待している結果は

root/0
root/1
root/2

誰かが私がこれが起こっている理由を理解するのを手伝ってもらえますか?

4

2 に答える 2

1

strcat() 最初の引数をインプレースで変更し(2番目の引数を追加し)、変更された入力バッファーを返すだけです。この動作の詳細については、こちらをご覧ください。

于 2012-10-22T21:47:17.160 に答える
0

期待するものを取得するには、代わりにstrcpy()とその兄弟を使用してください。strncpy()その使用法のためのグーグル。

于 2012-10-22T21:50:36.230 に答える