【问题标题】:Saving multiple chars in pointer C (dynamic memory)在指针 C 中保存多个字符(动态内存)
【发布时间】:2014-01-17 06:48:29
【问题描述】:

我需要在 C 中创建迷你社交网络。我为每个人创建了一个 struct。我将每个朋友存储在带有 id 的 char 指针中。我以为我可以这样管理它:

ptr_friends = id1,id2,id3,id4...

当我需要它们时,我可以使用 strtok 阅读它们。

但我无法以这种方式保存它。应该是这样的:

ptr_friends = ptr_friends + id + ","

但当然这不起作用,我不知道该怎么做。

我该如何保存和使用这种方式?或者,如果您对保存方法有其他想法,请告诉。

【问题讨论】:

  • 欢迎来到 StackOverflow。请显示您尝试过的一些源代码。并阅读一些 C 语言教程!
  • 看看strcat() -- bit.ly/18TqzP1

标签: c pointers memory dynamic char


【解决方案1】:

我建议您使用malloc(size_t)ptr_friends 设为指向多个字符的指针,然后在每次要向好友列表添加ID 时使用realloc(void *, size_t) 调整空间大小。这样您就可以使用ptr_friends[i] 获取数字。

例如:

int friends_size = 1;

char *ptr_friends = malloc((size_t)1);

ptr_friends[0] = john_id; // john_id is a fictional ID here

当你想添加朋友时:

ptr_friends = realloc(ptr_friends, ++friends_size);
ptr_friends[friends_size-1] = mary_id;

编辑:

如果你想做一个添加朋友的功能,例如addfriend(char *,int),那么执行以下操作是错误的:

void addfriend(char *ptr_friends, int *friends_size, int id)
{
    ptr_friends = realloc(ptr_friends, (size_t) ++(*friends_size));
    ptr_friends[friends_size-1] = id;
}

ptr_friends 这里正在重新分配,由于指针在重新分配时可以移动,我们将它存储在ptr_friends 中。但是,它是函数内部ptr_friends,这意味着我们给函数的指针不会被修改,因为函数的参数是事先复制别处。也就是说你必须给指针一个指针,这样你就可以在主代码中修改指针了。

【讨论】:

    【解决方案2】:

    我想这会对你有所帮助:https://stackoverflow.com/a/5901241/2549281

    你应该使用类似的东西:

    strcat(ptr_friends, id);
    strcat(ptr_friends, ",");
    

    而不是 ptr_friends + id + ","

    【讨论】:

      【解决方案3】:

      用 id 做一个整数数组不是更容易吗?

      int max_friends  = 50;
      int friends_size = 0;
      int friends*     = malloc(sizeof(int) * MAX_FRIENDS);
      friends[friens_size] = id;
      friends_size++;
      

      【讨论】:

        【解决方案4】:

        另一个建议是,您可以使用“通用”动态数组(使用 void*),而不是使用字符串或简单数组。这是一个简单的代码,你可以找到很多例子。

        看看那个问题:C dynamically growing array

        【讨论】:

          猜你喜欢
          • 2021-02-28
          • 1970-01-01
          • 2014-02-14
          • 2015-05-19
          • 2015-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多