2017-02-02 1 views
2

Voici un exemple de programme pour trouver la longueur de la chaîne.Soustraction du pointeur sur Big/Little endian

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

Ma question est, est ce programme est bien pour Little et Big machine boutiste?

+4

L'endianness n'a aucune influence sur votre code. Mais votre code est pauvre de toute façon à cause du '20' codé en dur. –

+5

Note: la soustraction du pointeur donne le type 'ptrdiff_t' qui peut différer de' int'. Le code C99 portable utilise 'printf ("% td \ n ", (ba) +1);' – chux

+1

Le problème principal de votre approche est plutôt que pour l'utiliser, vous devez déjà connaître la longueur de la chaîne ... et est 21, pas 20. – Lundin

Répondre

2

Oui, c'est bon. Les problèmes apparaissent uniquement lorsque vous examinez des octets individuels d'un entier plus grand.

+2

@Govind Parmar Merci pour votre modification, mais je l'ai annulée parce que je pense que cela pourrait causer de la confusion si elle dit "type de données plus grand qu'un octet", parce que par exemple une chaîne est plus grande qu'un octet, pourtant l'endianness n'a pas d'importance. L'endianness n'a d'importance que pour les entiers (et parfois les types à virgule flottante). – alain

2
  1. Vous avez affaire à des personnages, si peu d'endian ou big endian ne vient pas dans l'image. Il n'est valide que pour des valeurs de données de 2 octets ou plus.

  2. La soustraction de pointeurs ne dépend pas de Little endian ou big endian de toute façon.

+3

En quoi le point 1 est-il pertinent pour l'endianess? –

+0

@PaulOgilvie Les octets individuels ne sont pas sensibles à l'endianness –

+1

Alors qu'est-ce que cela a à voir avec la soustraction du pointeur? –