如何解决如何找到char**数组的大小
如何求char**数组的大小,我一直在做
int getSize(char** args)
{
int size = (int)sizeof(args)/ (int)sizeof(arg[0]);
return size;
}
但它只返回值 1。我似乎无法弄清楚如何找出我的 char* 数组中有多少个元素。
解决方法
argv
和环境表(在大多数实现中)使用标准方法:用 char *
终止指向字符串的 NULL
指针数组:
Array element Points to
0 -> "string 0"
1 -> "string 1"
2 -> "string 2"
. -> .
. -> .
. -> .
N -> "string N"
N+1 -> NULL
所以你可以用类似的东西来计算尺寸:
int getSize(char** args)
{
int size = 0;
while ( args[ size ] )
{
size++;
}
return( size );
}
,
问题在于 args
是一个指针(实际上是一个指向指针的指针),而不是一个数组,所以 sizeof
技巧不起作用 - 您正在划分 { 的大小{1}} 的大小与 char **
的大小相同,在您的机器上它们是相同的,因此您得到的结果为 1。
指针值中没有元数据可以告诉您它是指向单个对象还是指向对象序列中的第一个对象,或者序列中有多少个对象 - 这些信息必须单独跟踪。
正如 Andrew 指出的那样,在这种情况下,您通常必须依靠哨兵值来标记序列的结尾。
,在 c 中没有“好的”方法来确定数组的大小。因此,有很多设计模式要么具有静态大小的数组,要么在末尾放置一些定界符以表示数组的末尾(例如所有字符串末尾的空字节)。
因此,根据您的用例,在您想要调用 argc
时传递 getSize
参数可能是有意义的,或者在 char**
的末尾存储一个 NULL并遍历数组直到找到它:
// snake case is generally standard for c
int get_size(char** args)
{
int i = 0;
// check that the first element of each arg is not ‘\0’
for ( ; args[i] != NULL; ++i) {
}
return i;
}
如果没有这些方法之一,您很可能会遇到访问未分配或已释放内存的问题,并且没有一种很好的方法来处理这些问题,任何尝试都肯定会降低可读性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。