如何将未知大小的字符串数组传递给C中的函数

时间:2019-03-23 14:15:03

标签: c arrays string

我一直在寻找如何找到一种将字符串传递给C语言中的函数的方法,但是它们似乎都需要数组的长度或非常具体的信息。我正在尝试创建一个将列出给定字符串数组的函数,以便可以在任一维度上改变长度。

目前,我有:

void printStrings(char *arr[])
{
    for (int i = 0; i < 2; i++)
    { //print all list items
        printf("   %s\n", arr[i]);
    }
}

int main(int argc, char *argv[])
{
    char *list[2] = {"Hello", "Goodbye"};
    printStrings(list);
    return 0;
}

我希望能够读取printStrings中数组的长度,以消除for循环中的硬编码2,以便它可以在所有长度上运行。

这与直接询问数组的长度不同,因为它涉及将数组传递给函数。

3 个答案:

答案 0 :(得分:2)

您可以为此使用struct。

struct string_list{
   char **list;
   size_t len;
};

void printStrings(struct string_list s_list)
{
    for (int i = 0; i < s_list.len; i++)
    { //print all list items
        printf("   %s\n", s_list.list[i]);
    }
}

int main(int argc, char *argv[])
{
    struct string_list s_list;
    char *list[2] = {"Hello", "Goodbye"};
    s_list.list = list;
    s_list.len = sizeof(list) / sizeof(list[0]);
    printStrings(s_list);

}

答案 1 :(得分:1)

如果要坚持使用char *数组,则不需要。如果您使用C字符串,则它们以0结尾,并且可以使用strlen()来获取它们的长度。

但是,您可以执行以下操作:

struct string {
    char* String;
    int   Length;
};

并传入结构数组。显然,您必须正确地将指针分配给正确的字符串,并存储每个字符串的正确长度。

答案 2 :(得分:1)

使用NULL终止指针数组。然后进行迭代,直到找到NULL。

#include <stdio.h>

void printStrings(char *arr[])
{
    int i = 0;
    while ( arr[i])//not NULL
    { //print all list items
        printf("   %s\n", arr[i]);
        i++;
    }
}

int main(int argc, char *argv[])
{
    char *list[] = {"Hello", "Goodbye", NULL};
    printStrings(list);
    return 0;
}