7

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

3 に答える 3

9

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 がインデックスで、'pointer' がポインターです。上記の for ループは、一度に 1 つのインデックスずつ配列全体を移動します。これは、'i' がインデックスであり、'i' がループの各ローテーションの最後で増加し、ループが終了 NULL 文字に到達するまでローテーションし続けるためです。配列。

したがって、これに沿って何かを試してみてください。

void printoutarray(char *pointertoarray)
{
  for(i = 0; i <= 2; i++)
  {
    printf("\n Element is: %s \n", pointertoarray[i]);
  }
}
于 2013-01-13T20:55:18.157 に答える
7

これを行います:

char *pointertoarray = &array[0];

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

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

于 2013-01-13T18:46:18.623 に答える
2

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

printf("\n Element is: %s \n", pointertoarray);
于 2013-01-13T18:45:43.403 に答える