通常您會按照manual中的說明進行操作,並將指針指向main
提供的參數,以便gstreamer可以刪除它處理的參數。
#include <stdio.h>
#include <gst/gst.h>
int main (int argc, char *argv[])
{
gst_init (&argc, &argv);
// handle the remaining argc values of argv
如果你想創建自己的論點,然後創建相同類型的數組,其main
將有:
void gst_init(int *argc, char **argv[])
{
// strip one argument
--*argc;
++*argv;
}
void foo()
{
int argc = 2;
char* args[] = {"myvalue1", "myvalue2"};
char** argv = args;
for(int i= 0; i < argc; ++i)
printf("%s\n", argv[i]);
gst_init(&argc, &argv);
for(int i= 0; i < argc; ++i)
printf("%s\n", argv[i]);
}
如果你不使用C99,它更容易有一個單獨的指針到本地數組字符串。使用C99,您可以只寫char** argv = (char*[]){"myvalue1", "myvalue2"};
以指向匿名數組中的第一個元素的指針開始。
您需要將指針傳遞給指向數組的變量,而不是指向數組中第一個元素的指針;在第一種情況下,將數組參數降級爲指針可以獲得與第二種情況下聲明指針局部變量相同的效果 - 然後您可以傳遞此變量的地址,並且函數可以對其進行修改。由於編譯器會推導出數組中元素的數量,因此32位機器上的sizeof(args)爲8; sizeof(argv)是4,因此++ args會將指針移動到數組的末尾,而不是像++ argv那樣移動到下一個元素。編譯器可以保護您免受這種操作。
但通常你會按照手冊的建議使用它。
不起作用:'錯誤C2440:'初始化':無法從'const char [9]'轉換爲'char **' – utnapistim 2010-06-22 12:40:38
@utnapistim,請參閱我的更新。 – 2010-06-22 12:44:52
更新後的代碼編譯成功。我會過去的。謝謝。 – utnapistim 2010-06-22 12:53:53