Bonjour,

Je cree actuellement un programme en C qui se lance sans OS, en gros il y a un boot en assembleur qui lance ce programme. Bref, je ne dispose d'aucune macro ou librairies pour mon programme. J'essai de mettre en place une fonction semblable à printf, je fais pour tester:

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
31
32
33
34
35
void toto( char *texte, ... )
{
   int position = 0;
   while( texte[position] != '\0' )
   {
      printf ( "[%c]", texte[position] );
      position++;
   }
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
   position++;
   printf ( "(%c)(%i)", texte[position], texte[position] );
}
 
main()
{
   toto ( "OK", "toto" );
   return(0);
}
Dans ce cas j'obtient:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[O][K](t)(116)(o)(111)(t)(116)(o)(111)( )(0)( )(0)( )(0)( )(0)(')(39)()(12)
Donc j'en deduit que j'ai "OK" + caractere null + "toto" + 4 caracteres null puis du reste sans importance.

Si je change en mettant dans le main:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
main()
{
   toto ( "OK", 5 );
   return(0);
}
ou

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
main()
{
   int titi = 8;
   toto ( "OK", titi );
   return(0);
}
J'obtient:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[O][K]( )(0)( )(0)(')(39)()(12)()(23)()(7)(7)(55)()(2)()(23)()(7)
soit "OK" + 2 caracteres null.

Ma question, comment fait printf pour trouver la valeur de titi ? Je ne souhaite pas utiliser des macros deja faite, c'est pour cela que je n'utilise pas va_list, va_start etc...

Merci de vos reponses !