命令行参数的元素数

时间:2015-08-21 12:59:27

标签: c++ c

我遇到命令行参数问题。 我需要编写一个程序来计算argv数组中传递的每个命令行参数的元素大小。 简单的代码看起来像这样。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = 0;
    for (i = 0; i < argc; i++)
    {
        printf("%lu\n", sizeof(argv[i]));
    }

    return 0;
}

我明白这是错误的,“argv”是一个指向字符串的指针数组。我也尝试添加星号,但结果却带回“1”(字节),因为我说“转到那个地址”,它向我展示了每个命令行参数的第一个元素的大小。 那么,如何在没有很多循环的情况下解决这个问题,只需使用“sizeof”函数?

UPD:对不起那个“%s”错误。在实际的代码中我没有写它。

我明白sizeof()不会给我带来数组的大小。我指的是组合“sizeof()/ sizeof(char)”

另外,非常感谢“strlen”提醒。我正在读书。我还不懂C语言。对不起,我的愚蠢错误。

3 个答案:

答案 0 :(得分:3)

您正在打印字符指针的大小。相反,你想要字符串的长度。您可以使用标准函数strlen

(注意:argv[0]是程序名称本身,因此第一个数字表示程序名称的长度。)

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i = 0;
    for (i = 0; i < argc; i++)
    {
        printf("%zu\n", strlen(argv[i]));
    }

    return 0;
}

答案 1 :(得分:0)

而不是sizeof使用strlen()返回字符串的大小,同时从计数中排除字符串终止字符。更多信息请访问:Strlen

答案 2 :(得分:0)

从您的程序中可以看出,主要参数的声明中更精确的类型为char *。也就是说,它们是指向传递给程序的字符串的第一个字符的指针,如参数。

因此,您需要使用标头strlen中声明的标准C函数<string.h>来确定像argumnet一样传递的字符串的大小。 考虑到数组argv中的最后一个指针值为NULL。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    for ( char **p = argv; *p; ++p )
    {
        printf( "%zu\n", strlen( *p ) );
    }

    return 0;
}