我需要在C中创建迷你社交网络。我为每个人制作了struct
。我将每个朋友存储在一个带有id的char
指针中。我以为我可以像这样管理它:
ptr_friends = id1,id2,id3,id4...
当我需要它们时,我可以使用strtok
来阅读它们。
但我无法以这种方式保存它。它应该是这样的:
ptr_friends = ptr_friends + id + ","
但当然这不起作用的原因,我不知道该怎么做。
如何保存和使用这种方式?或者如果您对保存方法有其他想法,请告诉我。
答案 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