将字符串数组传递给函数C

Max*_*lve 4 c arrays string function

我目前对如何将字符串数组传递给函数感到困惑。我创建了一个一维数组。我已经做过的方法有效,但似乎多余,我认为有更好的方法可以做到这一点,但我不确定如何做。我试图找到一种方法可以一次将所有4个元素传递给函数。

这是我的代码示例。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void sort(char *,char *,char *, char *);//Function prototype
int main()
{
    char *string_database[4]={'\0'};
    string_database[0]="Florida";
    string_database[1]="Oregon";
    string_database[2]="California";
    string_database[3]="Georgia";
    sort(string_database[0],string_database[1],string_database[2],string_database[3]);
    return 0;
}

void sort(char *string1, char *string2, char *string3, char *string4)
{

    printf("The string is= %s\n",string1);
    printf("The string is= %s\n",string2);
    printf("The string is= %s\n",string3);
    printf("The string is= %s\n\n\n",string4);

}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您,感谢您对我的问题的任何答复。

Arj*_*Dan 8

您可以这样做:

void sort(char **, int);
int main()
{
    char *string_database[5]={'\0'};
    string_database[0]="Florida";
    string_database[1]="Oregon";
    string_database[2]="California";
    string_database[3]="Georgia";

    sort(string_database, 4);
    return 0;
}

void sort(char **str, int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
      printf("The string is= %s\n",str[i]);

}
Run Code Online (Sandbox Code Playgroud)

  • 请在sort函数中添加一个length参数(因为您不能在sort()函数中执行sizeof(str))。 (3认同)
  • 好吧,答案应该对想知道同样事情的人有用,并且正确地做这件事应该是一个高优先级或*至少*解释陷阱等。 (2认同)

Mic*_*lis 5

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void sort(char *strings[], int n);//Function prototype
int main()
{
    char *string_database[4]={'\0'};
    string_database[0]="Florida";
    string_database[1]="Oregon";
    string_database[2]="California";
    string_database[3]="Georgia";
    sort(string_database, 4);
    return 0;
}

void sort(char *strings[], int n)
{
    int i;
    for (i=0; i<n; i++) {
        printf("String %d: %s\n", i, strings[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

您通常将数组的长度与数组本身一起传递。char *strings[]虽然这实际上只是简单的糖,所以如果你想保留没有参数名称的函数原型,你也可以使用char **strings,这样代码就可以是这样的:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void sort(char **, int);//Function prototype
int main()
{
    char *string_database[4]={'\0'};
    string_database[0]="Florida";
    string_database[1]="Oregon";
    string_database[2]="California";
    string_database[3]="Georgia";
    sort(string_database, 4);
    return 0;
}

void sort(char **strings, int n)
{
    int i;
    for (i=0; i<n; i++) {
        printf("String %d: %s\n", i, strings[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,正如下面的 Jite 指出的那样,使用诸如char *strings[]可能会误导您或其他代码读者认为他们正在处理静态矩阵的语法,而事实并非如此;因此,您应该选择更直接的char **strings语法。