命令行参数的元素数量
Number of elements of command line arguments
我有一个命令行参数的问题。我需要编写一个程序,该程序将计算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;
}
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用不带参数的函数访问结构元素
- 打包可变参数模板具有零元素时的递归
- 使用并行参数向量调用元素向量的成员函数
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 在将向量作为参数传递给函数后,我无法访问函数中向量的元素
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 这种获取模板参数包中最后一个元素的方法是否有隐藏的开销?
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- 尝试将参数包的第一个元素作为函数调用,并将包的其余部分作为参数传递给它
- 如何部分专业化功能以用元组元素作为参数调用功能
- const 数组,用于在数组长度定义中使用其元素或为模板参数提供值
- 我如何将std ::数组作为模板参数传递,其中C 中的元素数量不同
- 通过将两个参数包的元素线程化为类型对来解压缩这两个参数包
- 如何查找/删除具有特定参数的结构向量的元素
- 如何获取参数包中元素的索引
- C 初始化矢量每个元素,带有另一个向量的参数
- 调用带有引用vector元素参数的c++函数