字符数组的长度 - C.

时间:2013-06-21 14:33:04

标签: c linux

我有一个

的指针字符数组
void main(){
    char* array[] = 
            {
                    [0] = "foo",
                    [1] = "bar",
                    [2] = "baz"
            };
read(array);
}

并尝试使用strlen

获取长度时
int read(const char* events[]){
int size_of_events;
        size_of_events = (strlen(events));
}

它会抛出以下警告:

warning: passing argument 1 of ‘strlen’ from incompatible pointer type [enabled by default]
In file included from test.c:6:0:
/usr/include/string.h:395:15: note: expected ‘const char *’ but argument is of type ‘char **’

我无法理解问题所在..

4 个答案:

答案 0 :(得分:1)

你试图在非字符串上计算strlen - 事实上是一个字符串数组。当您传递strlen(指向字符数组数组的指针)时,char *char **作为其参数。看看strlen(events[0])会发生什么 - 应该返回3,"foo"的长度。

答案 1 :(得分:1)

您正在尝试在指针数组上使用字符串函数。

read中(顺便说一下,不要使用libc函数名)events类型为const char **,也就是指向数组的指针或指向char的char *指针。

在其上使用strlen会产生不可预测的结果。如果您很幸运,它会因违反分段而导致程序崩溃。

在C数组中,惯性不具有大小或长度。您需要将其作为单独的参数传递给您的函数。

strlenchar *(字符数组)起作用的原因是因为约定C中的字符串由特殊的空终止符号'\0'终止。它会计算第一个'\ n'之前的字符数。常规数组不是这种情况。

如果您想要关联字符串的长度,那么您可以使用strlen(events[0]), strlen(events[1]), strlen(events[2])

获取它们

答案 2 :(得分:0)

strlen给出char*的长度,但您传递的是char**

我认为你想要数组的长度,但你不能拥有它,因为你最后没有NULL

如果您的数组如下:

char* array[] = 
        {
                [0] = "foo",
                [1] = "bar",
                [2] = "baz",
                [3] = NULL,   /* in stdlib.h */
        };
然后你可以去找像

这样的东西
int read(const char* events[]){
        int size_of_events = 0;
        while (events[size_of_events] != NULL)
            size_of_events++;
        return (size_of_events);
}

如果您的事件数组的大小未知并且您想要计算它,那么只需在末尾添加NULL然后计算

答案 3 :(得分:0)

您需要传入一个字符串,而不是一串字符串。使用一个字符串的索引而不是**来传入一个字符串。