0

ユーザー入力文字列を配列に格納するプログラムを作成しています。次に、配列を関数に渡して2番目の要素を出力します。しかし、関数内の印刷が実行されるたびにプログラムがクラッシュすることに気付きました。

以下の私のサンプルコード:

main()
{
int num, count;
char strStorage[10][10];

printf("\nEnter how many strings: ");
scanf( "%d" , &num);
fflush(stdin);

for ( count = 0 ; count < num ; count++)
{
    printf("Enter a string: ");
    gets(strStorage[count]);
    fflush(stdin);
}

//This works
printf("%s", strStorage[2]);

printMyArray(strStorage);
}

void printMyArray(char *myArray[ ])
{
    //This doesnt work
    printf("%s", myArray[2]);

}

配列が関数に渡される方法を学ぶためにこれを行っています。誰かがこれで私を助けることができるならば、それを感謝してください。

ありがとう

4

3 に答える 3

0

問題は、double 配列をポインターの配列としてではなく、double 配列として実際に渡す必要があることです。

 void printMyArray(char *myArray[ ])

になる

 void printMyArray(char myArray[][10])
于 2013-02-15T11:07:43.247 に答える
0

コードにいくつかの問題があります。

A) 10 個の文字列用のスペースを確保しましたが、ユーザーは 10 個を超える入力を選択でき、それらを止めるために何もしません。

B) ユーザーは 9 文字 (設定した最大文字数) を超える文字列を入力できます。

C)他の回答が言うchar* []ように、char [][10]

于 2013-02-15T11:08:20.220 に答える
0

char *myArray[ ]ポインターの配列を宣言します。したがって、各要素はダブルポインターです。

必要な要素にアクセスするには

printf("%s", *myArray[2]);

ここで、はポインターの配列の 2 番目のポインターを指す場所に*myArray[2]相当し、別の を追加すると、そのポインターが指す値にアクセスします。*(*(myArray + 2))*(myArray + 2)*

于 2013-02-15T11:08:41.097 に答える