0

我正在尝试 strcat char *. 不过,我注意到了一个问题。

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

我假设我没有正确释放 width_p,所以它连接了以前的名称。

我期待的结果是

root/0
root/1
root/2

谁能帮我弄清楚为什么会这样?

4

2 回答 2

1

strcat() 就地修改它的第一个参数(将第二个参数附加到它),然后简单地返回修改后的输入缓冲区。在此处阅读有关此行为的更多信息。

于 2012-10-22T21:47:17.160 回答
0

要获得您所期望的,请改用strcpy()和它的兄弟strncpy()。谷歌的使用。

于 2012-10-22T21:50:36.230 回答