我在结构中有一个char指针来存储名称。当我插入值并打印时,将为所有节点打印名称的最后一个值。

typedef struct tests{
      int id;
      char *p;
  struct tests *next;
}test;'

'void add(test **root,int id,char *name){
  test *newnode=(test* )malloc(sizeof(test));
  newnode->id=id;
  newnode->p=name;
  newnode->next=NULL;
  test *curr;
  curr=(*root);
  if((*root)==NULL){
    (*root)=newnode;
  }

  else{
    while(curr->next!=NULL){
      curr=curr->next;
    }
    curr->next=newnode;
  }
}

最佳答案

您最有可能实现的目标是:

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

typedef struct test_s {
  int id;
  char *p;
  struct test_s *next;
} test_t;

test_t** add(test_t **root, int id, char const *name){
  size_t len = strlen(name);
  test_t *newnode=(test_t*)malloc(sizeof(test_t)+len+1); // 1 goes for \0 terminator
  newnode->id=id;
  strcpy(newnode->p=(void*)(newnode+1), name);
  newnode->next=NULL;
  test_t **tail = root;
  while (*tail) {
    tail = &(*tail)->next;
  }
  *tail = newnode;
  return &(newnode->next);
}


代码的问题是,您从未复制仅分配单个指针的字符串。

再次看一下指针机制,另外,我建议您检查一下string.h参考。

关于c - 带字符串指针的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44760325/

10-13 03:53