我遇到命令行参数问题。 我需要编写一个程序来计算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语言。对不起,我的愚蠢错误。
答案 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;
}