Salut tout le monde,
j'apprends le langage c et j'ai besoin d'aide. Je suis en train de programmer la fonction printf avec les fonctions var_ap var_arg var_start, write ...
Je comprends pas pourquoi il m'affiche que les premières lettres des chaines de caractère.
Voici mon code:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "myprintf.h"
int myprintf(const char* format, ...)
{
    int i=0;
    char* s=NULL;
    va_list ap;
    va_start(ap, format);
 
    while(format[i] != 0)
    {
        switch(format[i])
        {
            case '%':
            //printf("%d\n",&format[] );
                switch(format[++i])
                {
                    case 's':
                        write(1, va_arg(ap, char*), sizeof(char));
                       //write(1, s=va_arg(ap, char*), (size_t)strlen(s));
 
                        break;
                    case 'd':
                        write(1, va_arg(ap, int*), sizeof(int));
                        break;
                    case 'c':
                        write(1, va_arg(ap, char*), sizeof(char));
                        break;
                    default:
                        write(1, "%", sizeof(char));
                        write(1, &format[i], sizeof(char));
                }
                break;
            default :
                write(1, &format[i], sizeof(char));
        }
        i++;
    }
 
    va_end(ap);
    return 0;
}
 
Voila le main:
#include "main.h"
#include "myprintf.h"
 
int main(int argc, char* argv[])
{
    int a=1;
 
 
    printf("\nExemple 1 : \n");
  char chaine[] = "Salut";
   myprintf("Affiche la chaine ===> %s\n", chaine);
   //printf("%s\n", chaine );
 
   myprintf("1 - une chaine\n");
   myprintf("2 - %s\n", "une autre chaine");
   myprintf("3 - %i\n", 42);
   myprintf("4 - %s %d %s%c", "avec", 4, "parametres", '\n');
 
    return 0;
}
Voila le résultat:
Exemple 1 :
Affiche la chaine ===> S
1 - une chaine
2 - u
3 - %i
4 - a p