Test en C... pourrez-vous trouver la solution? :D

Discussion dans 'Web, design' créé par k o D, 13 Janvier 2007.

Statut de la discussion:
Fermée.
  1. Offline
    k o D Belge !
    Non désolé :-'

    Allez... je vais quand même finir par avoir une bonne solution bien expliquée non?
    (J'avoue que je n'ai pas trouvé tout seul hein)
    k o D, 14 Janvier 2007
    #21
  2. Offline
    THiBOo Elite
    ABCABCBBC
    ABCABCC

    p ne bouge pas tant qu'on ne l'incrémente pas, p++ affiche d'abord sa "valeur" puis l'incrémente ensuite, tandis que ++p l'incrémente et ensuite affiche sa "valeur".
    THiBOo, 14 Janvier 2007
    #22
  3. Offline
    noLain www.wearewise.be
    Comme dit dans le pm, n'oublie pas la priorité des opérations

    (j'ai cliqué sur mp en voulant cliquer sur citer :0) )
    noLain, 14 Janvier 2007
    #23
  4. Offline
    PinGuX Elite
    je peux avoir la réponse en mp ?
    PinGuX, 14 Janvier 2007
    #24
  5. Offline
    k o D Belge !
    Faux... va falloir retourner chez Henriet hein :p
    k o D, 14 Janvier 2007
    #25
  6. Offline
    k o D Belge !
    C'est envoyé.
    k o D, 14 Janvier 2007
    #26
  7. Offline
    PinGuX Elite
    c'est tordu :gne:
    PinGuX, 14 Janvier 2007
    #27
  8. Online
    whatever42 ex membre
    Ça n'est pas un programme C (pas C99 en tout cas) car l'ordre d'évaluation des arguments est indéterminé (ISO/IEC 9899:1999 6.5.2.2 § 10) et qu'on est quand même censé mettre explicitement void pour les fonctions sans arguments. Sinon la plupart des compilateurs interprètent sans doute ce programme ça :
    Code:
     #include <stdio.h>
     
    int main(void) {
    		char s[100], *p;
    		p=s;
    		s[0]='A'; s[1]='B', s[2]='C', s[3]='\0';
     
    		printf ("%s%s%c%s\n",s,p,*(p+1),p+1);
    		printf ("%s%s%s\n",p,p,p+2);
    		return 0;
     }
    Ce qui donne une sortie conforme à ce que je pensais.

    Si vous voulez vous amuser avec du comportement indéterminé, vous pouvez essayer de comprendre ce programme.
    Code:
    #include <stdio.h>
    
    int main(void) {
    		char s1[] = "abcdefg";
    		char s2[] = "hijklmn";
    		char s3[] = "opqrstu";
    
    		printf("%s\n", &s2[sizeof(s2)]);
    		return 0;
    }
    Son comportement devrait varier d'une plateforme à l'autre mais vous n'en trouverez sans doute pas sur laquelle ça plantera (évitez juste les options de compilation à la con genre optimisation). En fait si vous avez une sortie différente que sur du x86 ça m'intéresse.
    whatever42, 17 Janvier 2007
    #28
  9. Offline
    k o D Belge !
    Ce n'est effectivement pas du C99 mais de la norme ANSI.
    k o D, 17 Janvier 2007
    #29
  10. Online
    whatever42 ex membre
    whatever42, 17 Janvier 2007
    #30
Statut de la discussion:
Fermée.