2016-04-04 24 views
0

使用glib库的GArray我想将位置x的值设置为给定值。就像我使用c数组和数组[x] = 5;使用glib库的GArray替换给定索引的值

为什么我找不到任何功能?这不是数组的意义吗?文档:https://developer.gnome.org/glib/stable/glib-Arrays.html

我可以删除旧值并插入新值。但这是一种愚蠢的行为。有没有更好的办法?

UPDATE:

在侏儒的Bugzilla它explaint对我来说这是通常的方式:

int *element = &g_array_index (array, int, i); 
*element = 42; 

https://bugzilla.gnome.org/show_bug.cgi?id=764599

+0

你试过'g_array_insert_val'吗? –

+1

是的,但是这插入了值。我想替换它。就像我告诉的 - 我可以插入新值并删除旧值 - 但是没有比复制每个值2次更快,更有效的方法吗? – AnnoSiedler

回答

2

文档没有明确这一点,但由于g_array_index是一个宏,你可以用它来设置和获取。

g_array_index(foo, int, 0) = 23; 
g_array_index(foo, int, 1) = 42; 

不幸的是,不更新,也不检查数组还挺击败GArray点的大小。您必须使用g_array_sized_newg_array_set_size以确保有足够的分配内存。

我找不到文档,也没有这方面的一个例子。在description中应该记录在范围之外,你可以使用g_array_index来“访问一个元素”,但后来它被g_array_index docs反驳,它说它只是“返回元素”。更好的办法是提供g_array_set_val并且不会有任何困惑。 Perhaps you can let them know

+0

比我想象的要容易;谢谢;你救了我的一天:)。 – AnnoSiedler