在C中如何获取char字符串指针数组中的项目数

时间:2012-12-24 00:53:25

标签: c arrays

我想实现以下函数来打印通过指针数组引用的几个char字符串的内容。如何在不将total作为函数的参数传递的情况下确定有多少指针?

如果它是int类型的数组,则可以使用sizeof()函数,但是我的数组的每个项都是指向char字符串的指针字符串可能有不同的长度我不认为我可以使用这种方法。

void printCharArray(char *arr[]){

    int length = sizeof(arr) / sizeof(char); /* this does not give correct 
                                          number of items in the pointer array */

    for (int i=1;i<=length; i++) {
        printf("Array item: [%s]",arr[i]);
    }

}

5 个答案:

答案 0 :(得分:10)

没有内置方法可以做到这一点,因为C不会像这样跟踪数组中的元素数。

您有几个选择:

  1. 传递数组中的项目数。
  2. 将最后一项设置为NULL,以便代码知道它何时到达结尾。 (这就是如何处理C字符串。)
  3. 否则,请修改数据结构以跟踪数组中的项目数。

答案 1 :(得分:6)

您不能将数组作为C中的函数参数传递。当用作函数参数时,数组名称会衰减为指向其第一个元素的指针,并且您必须单独指定可用数组元素的数量。

(在函数参数类型的上下文中,T[]T*以及T[12]是相同的,因此您的函数参数也可能是char ** arr。)

像这样:

void printCharArray(char ** arr, size_t len) { /* ... */ }

int main()
{
    char * arr[10] = { "Hello", "World", /* ... */ };

    printCharArray(arr, sizeof(arr)/sizeof(*arr));
}

(或者你可以提供一个“第一个”和一个“一个接一个”的指针,它可能是bit more natural。)

答案 2 :(得分:2)

如果将最后一个有效元素之后的元素设置为null,则可以执行以下操作:

void printCharArray(char *arr[]){

    for (int i=0; arr[i] != NULL; i++) {
        printf("Array item: [%s]",arr[i]);
    }

}

答案 3 :(得分:0)

void printCharArray(char *arr[]) {
    int length = sizeof(arr) / sizeof(char*); /* this does not give correct 
                                                 number of items in the pointer array */
    for (int i=0;i<=length; i++) {
        printf("Array item: [%s]",arr[i]);
    }
}

int main()
{
    char * arr[10] = { "Hello", "World", /* ... */ };
    printCharArray(arr); 
}

答案 4 :(得分:0)

首先我将y声明为全局变量。 htmTags是一个* char []。然后在main()

y = 0;
while( htmTags[y] ) {
        y++;
}

我没有在数组末尾添加null。提供数组元素的实际数量

或者这也有效     for(y = 0; htmTags [y]; y ++);