1

ポインター変数を使用して文字列の要素にアクセスしようとしていますが、コンパイル エラーを生成するコードに問題があります。

#include <stdio.h>
#define MAX 29

char arrayI[250];
char *ptr;

int main(void)
{
ptr = arrayI;

puts("Enter string to arrayI: up to 29 chars:\n");
fgets(arrayI, MAX, stdin);

printf("\n Now printing array by pointer:\n");
printf("%s", *ptr);


ptr = arrayI[1];     //(I set the pointer to the second array char element)
printf("%c", *ptr);  //Here is where I was wanting to use my pointer to 
                     //point to individual array elements.
return 0;
}

私のコンパイラの叫び:

[警告] 割り当てにより、キャストなしで整数からポインターが作成されます [デフォルトで有効]

ポインターが整数データ型に割り当てられた場所がわかりません。誰かがポインタ変数を実装しようとして失敗した理由を説明してもらえますか? 皆さんありがとう!

4

4 に答える 4

3
#include <stdio.h>
#define MAX 29
// An array declaration that can hold upto 250 characters 
char arrayI[250];
// A pointer variable that can hold the address of a character
char *ptr;
int main(void)
{
   // Assigning the array's base address to the pointer variable
   ptr = arrayI;
   puts("Enter string to arrayI: up to 29 chars:\n");
   fgets(arrayI, MAX, stdin);

   printf("\n Now printing array by pointer:\n");
   // Printing the entire array
   printf("%s", ptr);

   // Now modifying the pointer variable to point to the second character
   ptr = &arrayI[1];     
   // Printing the second character from left in the array
   printf("%c", *ptr);  
}

メモリが次のように割り当てられているとします。

ベースアドレスが 4000 から始まるとします。

      +----------+
4000  |          |    arrayI[0]  
      +----------+
4001  |          |    arrayI[1]
      +----------+
4002  |          |    arrayI[2]
      +----------+
           .
           .
           .
      +----------+
4249  |          |    arrayI[249]
      +----------+

Now ptr = arrayI => 4000

printf("%s",ptr);  //Print the entire string starting from address 4000

Now ptr = &arrayI[1] => 4001

printf("%c", *ptr); // Print valueAt(ptr) => valueAt(4001) => second character of arrayI
于 2013-11-11T03:55:44.277 に答える
1

このコード:

ptr = arrayI[1];     //(I set the pointer to the second array char element)
printf("%c", *ptr);

は壊れてます。ptrはタイプ の変数であり、それchar*に代入しようとしcharています。arrayI[1]のアドレスをに割り当てたいptrので、 を使用する必要がありますptr = &arrayI[1];

編集 - Catalyst が指摘したように、2 番目の printf は次のようになります: printf("%s", ptr)。

于 2013-11-11T03:51:31.650 に答える
0

問題は「ptr = arrayI [1]」という行だと思います。ptr は char* 型ですが、arrayI[1] は char 型です (C では int と同じであるため、コンパイラ メッセージ)。修正は、この行を *ptr = arrayI[1]; に変更する必要があります。

于 2013-11-11T03:52:48.983 に答える
0

これが必要になると思います

ptr = arrayI;

puts("Enter string to arrayI: up to 29 chars:\n");
fgets(arrayI, MAX, stdin);

printf("\n Now printing array by pointer:\n");
printf("%s", ptr);


ptr = arrayI+1;     //(Where 1 is the sizeof char)
printf("%c", *ptr)

ptrはポインターでarrayIあり、ポインターでもありますarrayI[1]が、文字別名整数です。

于 2013-11-11T03:57:04.547 に答える