Bonjour, bonsoir =)
Je me suis amusez à programmer la fonction atoi,
et j'aurai quelque question sur les conversions d'un type en un autre (je croit que ça s’appelle des cast)
Donc dans l'exemple un char en int.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int	fonction_atoi(char *str)
{
	int result ;
	int i ;
	int n ;
 
	i = 0 ;
	n = 0 ;
 
	while((str[i] == '\n') || (str[i] == ' '))
		i++ ;
 
	if(str[i] == '-')
		n = 1 ;
 
	if(str[i] == '-' || str[i] == '+')
		i++ ;
 
	while(str[i] && (sttr[i] >= '0') && (sttr[i] <= '9'))
	{
		result = result * 10 ;
		result = result + str[i] - '0' ;
                i++ ;
	}
 
	if(n == 1)
		return (-result) ;
	else
		return (result) ;
}
Alors pour commencer ma premier question.

1 - Ques qu'il ce passe quand ont fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	result = result * 10 ;
	result = result + str[i] - '0' ;
Admettons que j'ai donner a ma fonction atoi 155 en paramètre .
result = result * 10
J'ai bien compris l'utilité de cette ligne (Au prochain tour le 1 sera un 10 au quel ont ajoutera 5, puis 15 * 10 = 150 au quel ont ajoutera 5 ce qui nous donnera le 155 attendus)

Concernant la seconde ça reste très trouble.
Donc ont ajoute result au caractère parcourut par i jusque là pas de soucis. Mais quand je faisait juste ça ça ne marchais pas un amis ma dit rajoute un "- '0'" magique tout marche ! Sauf que je n'aime pas trop la magie Auriez vous une explication ? Que ce passe t'il vraiment derrière cette ligne ? Comment un char de 1 octet et convertit en un int de 4 octet ?

2 - Comment voir toute les possibilités d'une fonction ?

En voulant reproduire cette fonction je les comparés a l'original dans mon main.
Je lui passe donc les même variable que la mienne.
J'ai donc fait des test pour savoir comment elle réagis a certain paramétré (J'ai donc compris qu'il fallait gérée le '+'/ '-' les espace et le \n )
Mais je ne connait pas toute les possibilité de cette fonction et je n'est rien trouvé dans le man.


Merci de votre lecture/réponse.
Désolé pour les fautes et mes mots imprécis.