2017-02-02 2 views
2

これは、文字列の長さを見つけるサンプルプログラムです。ビッグ/リトルエンディアンでのポインタの減算

{ 
     char *ptr="Autobiography Of Yogi"; 
     char *a = ptr , *b = &ptr[20]; 
     printf(" length is %d ", (b-a)+1); // subtracting pointers to find string length 
    } 

私の質問は、リトルエンディアンマシンとビッグエンディアンマシンの両方でこのプログラムは問題ないのですか?

+4

エンディアンはコードに影響しません。しかし、ハードコーディングされた '20'のため、あなたのコードは貧弱です。 –

+5

注:ポインタ減算の結果、 'int 'と異なるかもしれない' ptrdiff_t'型が生成されます。移植性のあるC99コードでは、 'printf("%td \ n "、(ba)+1);' – chux

+1

を使用します。あなたのアプローチの主な問題は、それを使用するには文字列の長さを知っていなければなりません。 – Lundin

答えて

2

はい、問題ありません。問題は、より大きな整数の個々のバイトを見る場合にのみ表示されます。

+2

@Govind Parmar編集していただきありがとうございますが、文字列が1バイトよりも大きいため、 "1バイトより大きいデータ型"と表示されると混乱を招く可能性があるので、それでもエンディアンは重要ではありません。エンディアンは実際には整数(および時には浮動小数点型)の問題です。 – alain

2
  1. 文字を扱っているため、リトルエンディアンまたはビッグエンディアンが画像に入りません。 2バイト以上のデータ値に対してのみ有効です。

  2. ポインタの減算は、リトルエンディアンまたはビッグエンディアンに依存しません。

+3

ポイント1はエンディアンとどのように関連していますか? –

+0

@PaulOgilvie個々のバイトはエンディアンに敏感ではありません –

+1

それでは、ポインタの減算とは何ですか? –