【问题标题】:Passing array of strings to functions C将字符串数组传递给函数C
【发布时间】:2015-09-09 02:02:38
【问题描述】:

我目前对如何将字符串数组传递给函数感到困惑。我创建了一个一维数组。我所做的方法有效,但似乎多余,我认为有更好的方法可以做到这一点,但我不确定如何。我正在尝试找到一种方法,可以一次将所有 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);

}

提前感谢您,感谢您对我的问题的任何回复。

【问题讨论】:

标签: c arrays string function


【解决方案1】:

在阅读了针对您的问题给出的所有答案之后。 我还想告诉你一件事。 您还可以逐个字符地打印字符串。

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++)
    {
       for (int j=0;str[i][j]!='\0';j++)
       {
          printf("%c",str[i][j]);
       }
       printf("\n");
    }
}

由于str是一个双指针,我们可以使用两个下标毫无问题地获取字符。

【讨论】:

  • 是的,当然不用说。 C 中的字符串是字符数组。字符串数组是二维字符数组。因此,您可以使用双下标来获取矩阵中位置的值。
【解决方案2】:
#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]);
    }
}

您通常将数组的长度与数组本身一起传递。 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]);
    }
}

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

【讨论】:

  • 我什至会说使用*strings[]作为函数参数是不好的做法,在我看来,更容易错误地在其上使用sizeof(这是无效的)。
  • @Jite 默认 main() 使用 *argv[]。正确使用sizeof 是程序员的任务。
  • @Glaedr 在定义和调用函数 char ** 字符串时,我不明白两个间接运算符的意义该程序不适用于一个间接运算符。
  • strings 是指向 char 的指针:在 C 中,数组被实现为指向第一个元素的指针,当您将它们传递给函数时,它是作为参数传递的指针。 strings 应该在主程序中接收指向 char 的指针数组,因此它必须是指向第一个元素的指针:指向 char 的指针。
【解决方案3】:

你可以这样做:

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]);

}

【讨论】:

  • 请在排序函数中添加一个长度参数(因为您不能sort()函数中执行sizeof(str))。
  • 这个答案应该对想知道同样事情的人有用,并且正确地做应该是一个高优先级或至少解释陷阱等。
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2017-04-05
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多