C 获取长度未知的字符串数组的长度

C 获取长度未知的字符串数组的长度,c,pointers,arrays,C,Pointers,Arrays,我有这个功能: int setIncludes(char *includes[]); 我不知道包含的值需要多少。可能需要包括[5],也可能需要包括[500]。那么,我可以使用什么函数来获取包含的长度呢?无论哪种方法,您都必须知道大小。一种方法是将大小作为第二个参数传递。另一种方法是与调用者达成一致,调用者应该在传递的指针数组中包含一个空指针作为最后一个元素。没有。这是因为数组在传递给函数时会衰减为指向第一个元素的指针 您必须自己传递长度,或者使用数组本身中的某些内容来指示大小 首先,“传递长

我有这个功能:

int setIncludes(char *includes[]);

我不知道
包含的
值需要多少。可能需要
包括[5]
,也可能需要
包括[500]
。那么,我可以使用什么函数来获取
包含的长度呢?

无论哪种方法,您都必须知道大小。一种方法是将大小作为第二个参数传递。另一种方法是与调用者达成一致,调用者应该在传递的指针数组中包含一个空指针作为最后一个元素。

没有。这是因为数组在传递给函数时会衰减为指向第一个元素的指针

您必须自己传递长度,或者使用数组本身中的某些内容来指示大小


首先,“传递长度”选项。使用以下方法调用函数:

int setIncludes (char *includes[], size_t count) {
    // Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr) / sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.

sentinel方法在末尾使用一个特殊值来表示不再有元素(类似于C
char
数组末尾的
\0
来表示字符串),类似如下:

int setIncludes (char *includes[]) {
    size_t count = 0;
    while (includes[count] != NULL) count++;
    // Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);

我见过的另一种方法(主要用于整数数组)是使用第一项作为长度(类似于Rexx stem变量):

您有两个选择:

  • 可以包含第二个参数,类似于:

    int main(int argc,char**argv)

  • 。。。或者,您可以双空终止列表:

    char*items[]={“一”、“二”、“三”、空}


  • 在C语言中,无法简单地确定这样一个任意数组的大小。它需要的运行时信息不是以标准方式提供的


    支持这一点的最佳方法是将函数中数组的长度作为另一个参数

    虽然这是一个非常古老的线程,但事实上,您可以使用Glib在C中确定任意字符串数组的长度。请参阅以下文档:

    如果提供,它必须是以null结尾的字符串数组。

    那么strlen()函数呢

      char *text= "Hello Word";
      int n= strlen(text);
    OR
      int n= (int)strlen(text);
    

    假设你指的是第一个,@Mohit,有点像。
    sizeof
    技巧将始终获取数组的长度(假设它尚未衰减为指针)。灵活性在于您不局限于传递该值。如果你有一个1000大小的数组,但里面只有20个有用的值,你可以传递20作为大小。为什么你要传递一个
    int
    数组给一个需要
    char*
    数组的函数?@caf,这是一个很好的观点,我只能说“我是个白痴!”:-)我不知道为什么我认为它们是整数数组,尽管我可能同时在研究两个不同的问题。现在已修复。有趣的是,对于
    main(int argc,char*argv[])
    的特殊情况,C标准要求调用方传递正确的计数,并在
    argv[argc]
    处包含空指针。皮带和吊带,没错,但它有优点。
      char *text= "Hello Word";
      int n= strlen(text);
    OR
      int n= (int)strlen(text);