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で文字列の配列を作成し、それへのポインタを作成する方法にあると思います。
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]);
}
}
これを行います:
char *pointertoarray = &array[0];
コンパイラで警告なしにコンパイルしますか?もしそうなら、あなたのコンパイラは壊れています。印刷されるエラーと警告をお読みください。
&array[0]
はchar**
ではなく、char*
アスタリスクを削除します
printf("\n Element is: %s \n", pointertoarray);