我正在尝试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
我假设我没有正确释放breadth_p,所以它连接了以前的名字。
我期待的结果是
root/0
root/1
root/2
任何人都可以帮我弄清楚为什么会这样吗?
答案 0 :(得分:1)
strcat()
修改就地它的第一个参数(将第二个参数附加到它)然后只返回修改后的输入缓冲区。 Read more about this behavior here.
答案 1 :(得分:0)
要获得您期望的内容,请改用strcpy()
及其兄弟strncpy()
。谷歌的用法。