10
votes

Longueur de chaîne entre les pointeurs

J'ai rencontré un petit problème et j'ai besoin d'aide:

Si j'ai un tampon alloué de caractères et que j'ai un point de départ et des points de départ quelque part dans ce tampon et que je veux la longueur entre ces deux points, comment Puis-je le trouver?

IE xxx

merci


0 commentaires

4 Réponses :


8
votes

Il ne s'agit que du pointeur ultérieur moins le pointeur antérieur.

int main(int argc, char* argv[])
{
    char buffer[] = "Its a small world after all";
    char* start = buffer+6;  // "s" in SMALL
    char* end   = buffer+16; // "d" in WORLD

    int length = end - start;

    printf("Start is: %c\n", *start);
    printf("End is: %c\n", *end);
    printf("Length is: %d\n", length);
}


2 commentaires

Vous n'avez pas besoin de vous lancer vers INT - c'est très dangereux, car INT est signé afin que vous finirez par faire des mathématiques avec deux intensions signées plutôt que des pointeurs et le résultat peut différer de ce que vous attendez.


Je ne pense pas que QRDL a raison. Deux Ints signés? Quels sont les deux Ints signés? La distribution est faite à la suite de la soustraction, et non les deux pointeurs qui sont soustraits. Le résultat de la soustraction du pointeur est signé, très correctement. Si cela arrive effectivement avant le début, le résultat devrait être négatif, non?



27
votes

juste xxx

sans ampersands et jette. C Arithmetics Pointer permet cette opération.


3 commentaires

Je viens de l'essayer et ça fonctionnait, je ne sais pas pourquoi j'ai commencé à lancer et là-bas. Merci


Parce que c'est ce que vous faites lorsque vous êtes nouveau à C. Ajoutez simplement une étoile ou une ampersand et espérez que cela fonctionne cette fois-ci. :-) Accrochez-vous, vous l'obtiendrez.


Je n'ai jamais fait ça. Mais je suppose que c'était parce que j'avais une expérience préalable avec Peek () et Poke ().



0
votes

Cette déclaration C calculera la différence entre la fin et le début. Simplement: xxx


0 commentaires

1
votes

Il y a même un type, PTRDIFF_T, qui existe pour tenir une telle longueur. Il est fourni par 'stddef.h'


0 commentaires