打印值存储在C中的** char中

时间:2013-09-23 22:26:06

标签: c++ c pointers

我是C的新手,当我看到类似** char(指向指针的指针?)的东西时,我确实知道指针的概念。它让我感到困惑。所以我正在看一个函数,其定义如下所示:

void Settings_ParseCommandLine( int argc, char **argv, thread_Settings *mSettings )

无论如何,我现在想要的是* argv持有的价值是什么。我想在上面做Printf。我怎么能这样做?

5 个答案:

答案 0 :(得分:4)

argv是一个字符串数组。 *argv相当于argv[0],也称为argv中的第一个字符串。你可以按照你的建议完全打印出来:

printf("%s\n", *argv);

如果你想全部打印(这可能更有用):

for (int i = 0; i < argc; i++)
    printf("%s\n", argv[i]);

答案 1 :(得分:3)

printf("%s\n", argv[0]);

printf("%s\n", *argv);

请务必检查argcargv的条目数。

答案 2 :(得分:2)

在C中我们通常认为char *是一个字符串吗?因此,将char **视为指向字符串的指针或指向char指针的指针。这意味着argv包含多个字符串(每个字符串应为空终止)。 argc告诉您argv包含多少字符串。

要打印它,请尝试以下方法:

for (i = 0; i < argc; ++i)
  printf("%s ", argv[i])

答案 3 :(得分:2)

如果声明了某些内容char,则表示它是(通常)8位字符值。

如果声明了某些内容char*,则表示它是指向char的指针。

如果声明了某些内容char**,则表示它是指向char指针的指针。

*运算符应用于表达式中的指针时,“取消引用”将导致指针指向的值返回。如果您不止一次地应用*,那么您应用它的是指向指针的指针。

在上面的例子中,char **argvargv参数的声明,将其定义为指向char的指针。

还有两件重要的事情需要了解。首先,sometype*指针可能(或可能不是)指向sometype数组的指针,而不是单个sometype值。 (除了检查指针的设置方式之外,没有办法知道是否是这种情况。)

其次,char值数组是在C中表示“字符串”的常用方式,因此char*通常会处理字符串。

通过归纳,char** 可能是指向字符串指针数组的指针。

答案 4 :(得分:0)

char** argv可以被认为是指向指针的指针,但它也可以被认为是一个数组数组。由于字符串是C中的字符数组,char**指向字符串数组。

如果要访问参数,可以这样做:

// argv[0] is the executable name
char* first_arg = argv[1]; // argv[1] is the first argument and so on...
printf("first arg: %s\n", first_arg);

确保使用argc在使用之前检查您是否有足够的参数:)