web-dev-qa-db-ja.com

cの文字列配列の要素を出力します

C-String配列の最初の要素へのポインターを受け取る関数を作成しました。これが配列であり、私がそれをどのように作成したかです。

char element1[60] = "ubunz";
char element2[60] = "uasdasffdnz";
char* array[10] = {element1,element2};

次に、配列の最初の要素へのポインターを作成しました。

char *pointertoarray = &array[0];

次に、作成した関数へのポインターを渡しました。

void printoutarray(char *pointertoarray){
  int i = 0;
  while (i < 2){
    printf("\n Element is: %s \n", *pointertoarray);
    pointertoarray = pointertoarray + 1;
    i = i+1;
  }
}

プログラムを実行すると、配列が出力されません。

私は以前にC++でこのプログラムを実行しましたが、STL文字列型を使用し、文字列の配列へのポインターを作成しました。私の問題は、Cで文字列の配列を作成し、それへのポインタを作成する方法にあると思います。

4
turnt

Printf()が%sで呼び出されると、多かれ少なかれ次のようになります。

for(i = 0; pointer[i] != '\0'; i++)
{
   printf("%c", pointer[i]);
}

あなたがしたいことは次のようなものです

for(i = 0; pointer[i] != '\0'; i++)
{
   printf("\n Element is %c", pointer[i]);
}

配列内の特定の要素を参照する場合は、ポインタとインデックスを使用する必要があります。つまり、この場合はポインタ[0]がインデックスで、「ポインタ」がポインタです。上記のforループは、配列全体を一度に1インデックスずつ移動します。これは、「i」がインデックスであり、「i」がループのすべての回転の終わりに増加し、ループがで終了するNULL文字に達するまで回転し続けるためです。配列。

したがって、これに沿って何かを試してみることをお勧めします。

void printoutarray(char *pointertoarray)
{
  for(i = 0; i <= 2; i++)
  {
    printf("\n Element is: %s \n", pointertoarray[i]);
  }
}
7

これを行います:

char *pointertoarray = &array[0];

コンパイラで警告なしにコンパイルしますか?もしそうなら、あなたのコンパイラは壊れています。印刷されるエラーと警告をお読みください。

&array[0]char**ではなく、char*

6
gustaf r

アスタリスクを削除します

printf("\n Element is: %s \n", pointertoarray);
1
hmatar