在指针C(动态内存)中保存多个字符

时间:2013-12-30 11:28:02

标签: c pointers memory dynamic char

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

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

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

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

ptr_friends = ptr_friends + id + ","

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

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

4 个答案:

答案 0 :(得分:1)

我建议您使用ptr_friends使malloc(size_t)成为指向多个字符的指针,然后在每次要向好友列表添加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中。但是,它是来自 inside 函数的ptr_friends,这意味着我们给函数的指针将得到修改,因为函数的参数是<事先在其他地方强化>复制。这意味着您必须指定指针,因此您可以修改主代码中的指针。

答案 1 :(得分:0)

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

你应该使用类似的东西:

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

而不是ptr_friends + id +“,”

答案 2 :(得分:0)

使用ID进行一系列整数会不会更容易?

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

答案 3 :(得分:0)

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

看看这个问题:C dynamically growing array