utn*_*tim 1 c++ arrays pointers
这真让我抓狂:
我有功能
void gst_init(int *argc, char **argv[]);
Run Code Online (Sandbox Code Playgroud)
在 gstreamer api 中,我想使用我定义的一些参数来调用它,例如:
int argc = 2;
char* argv[2] = {"myvalue1", "myvalue2"};
gst_init(&argc, &argv);
Run Code Online (Sandbox Code Playgroud)
此代码无法编译(我收到错误 C2664):
error C2664: 'gst_init' : cannot convert parameter 2 from 'char *(*)[2]' to 'char **[]'
Run Code Online (Sandbox Code Playgroud)
问题:如何定义argv将其作为参数传递的值?我使用 C++ 已有 5 年多了,但自从……我想是高中(五年多前)以来,我就没有使用过原始数组。
编辑:我正在使用 VS2010 Express。
通常,您会按照手册中的说明进行操作,并将指针传递给 提供的参数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
Run Code Online (Sandbox Code Playgroud)
如果您想创建自己的参数,请创建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]);
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用 C99,那么使用一个指向本地字符串文字数组的单独指针会更容易。使用 C99,您只需编写char** argv = (char*[]){"myvalue1", "myvalue2"};一个指向匿名数组中第一个元素的指针即可。
您需要传递一个指向数组的变量的指针,而不是指向数组中第一个元素的指针;在第一种情况下,将数组参数降级为指针与声明指针局部变量的第二种情况具有相同的效果 - 然后您可以传递该变量的地址,并且函数可以修改它。sizeof( args) 在 32 位机器上是 8,因为编译器会推导出数组中的元素数量;sizeof(argv) 是 4,因此 ++args 会将指针移动到数组末尾,而不是像 ++argv 那样移动到下一个元素。编译器会保护您免受此类操作的影响。
但通常您会按照手册建议的方式使用它。
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |