我一直在寻找如何找到一种将字符串传递给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,以便它可以在所有长度上运行。
这与直接询问数组的长度不同,因为它涉及将数组传递给函数。
答案 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;
}