命令行参数的元素数量

Number of elements of command line arguments

本文关键字:元素 参数 命令行      更新时间:2023-10-16

我有一个命令行参数的问题。我需要编写一个程序,该程序将计算argv数组中传递的每个命令行参数的元素大小。简单代码如下:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i = 0;
    for (i = 0; i < argc; i++)
    {
        printf("%lun", sizeof(argv[i]));
    }
    return 0;
}

我明白这是错误的,"argv"是一个指向字符串的指针数组。我还试图添加星号,但它带回了"1"(字节)作为结果,因为我说"去那个地址",它显示了我每个命令行参数的第一个元素的大小。那么,我怎么解决这个问题呢,不用那么多的循环,只用sizeof函数?

UPD:很抱歉那个"%s"的错误。在实际的代码中,我没有写它。

我知道sizeof()不会给我数组的大小。我指的是sizeof()/sizeof(char)的组合

另外,非常感谢你的"strlen"提醒。我现在正在学习。我还不懂C语言。对不起,我犯了愚蠢的错误。

您正在打印字符指针的大小。相反,您需要字符串的长度。您可以使用标准函数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("%zun", strlen(argv[i]));
    }
    return 0;
}

使用strlen()代替sizeof,它返回字符串的大小,同时从计数中排除字符串终止字符。更多信息在这里:Strlen

从程序中可以更精确地看到,主参数的声明类型为char *。也就是说,它们是指向字符串首字符的指针,像实参一样传递给程序。

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

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    for ( char **p = argv; *p; ++p )
    {
        printf( "%zun", strlen( *p ) );
    }
    return 0;
}
相关文章: