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

Statut
N'est pas ouverte pour d'autres réponses.
1er
OP
k o D

k o D

Elite
PinGuX a dit:
abcabcbbcabcabcc

c'est ca ?
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)
 

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".
 

noLain

www.wearewise.be
THiBOo a dit:
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".
Comme dit dans le pm, n'oublie pas la priorité des opérations

(j'ai cliqué sur mp en voulant cliquer sur citer :0) )
 

PinGuX

Elite
je peux avoir la réponse en mp ?
 
1er
OP
k o D

k o D

Elite
THiBOo a dit:
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".
Faux... va falloir retourner chez Henriet hein :p
 

PinGuX

Elite
c'est tordu :gne:
 
W

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.
 
1er
OP
k o D

k o D

Elite
Ce n'est effectivement pas du C99 mais de la norme ANSI.
 
W

whatever42

ex membre
J'ai pas de copie de la norme C ANSI mais ça m'étonnerait beaucoup qu'elle spécifie l'ordre d'évaluation des arguments.
http://c-faq.com/expr/comma.html
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut