web-dev-qa-db-ja.com

文字列の配列を関数Cに渡す

私は現在、文字列の配列を関数に渡す方法について混乱しています。 1次元配列を作成しました。私が行った方法は機能しますが、冗長であるように思われ、これを行うためのより良い方法があると思いますが、方法がわかりません。 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);

}

よろしくお願いします。私の問題への返信に感謝します。

7
Max twelve

あなたはこのようにそれを行うことができます:

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

}
10
#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構文を選択する必要があります。

5