Bonjour a tous,
Je suis confronté a un petit problème :
J'ai une fonction :
Et j'ai un main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 char *options_mycat() { char *os; os = "abcde"; return os; }
Puis j'affiche mon programme dans le terminal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int main() { char *opts; opts = options_mycat(); puts(opts); return 0; }
En clair : le résultat de ma fonction ne se stocke pas (du moins pas entièrement) dans ma variable "opts"... Ai-je oublié quelque-chose ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 " prompt$ ./a.out prompt$ "
Rhoblik.
PS : Lorsque je fais un "puts(os);" dans ma fonction tout va bien, "abcde" s'affiche correctement.
PPS : Lorsque je fais un "putchar(opts[0]);" dans mon main, il n'y a d'affiché que le "a" (normal puisque c'est le caractère qui est q l'emplacement 0 de mon char*, mais pourquoi le resultat de la fonction n'est pas stocké entièrement?).
PPPS : Pour ceux qui veulent avoir le vrai code (write_out(p,p), analyse_param(p), prompt(), et putstr(p) sont des fonction perso qui fonctionnent ^^ ) :
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
64
65
66
67
68
69
70
71
72
73
74
75 char *options_mycat(int nb, char **params) { int i; int y; int x; int j; char opts[3]; char *os; int nb_opt; if (nb > 1) { x = 0; for (i = 1; (i < nb) && (params[i] != "--") && (params[i] != "-"); i++) { if (params[i][0] == '-') { nb_opt++; for (y = 1; y < strlen (params[i]); y++) { if (params[i][y] == 'b' || params[i][y] == 'e' || params[i][y] == 'n') { if (option_cat (opts, params[i][y]) == 'N') { opts[x] = params[i][y]; x++; } } else { opts[0] = 'i'; opts[1] = params[i][y]; os = opts; return os; } } } } if (nb_opt == 0) return "N"; os = opts; return os; } else return "N"; } int main (int ac, char **av) { int i; char *opts; opts = options_mycat(ac, av); if (opts[0] == 'i') { putstr("cat: illegal option -- "); putchar(opts[1]); puts(""); puts("usage: cat [-ben] [file ...]"); } else { putchar(opts[0]); putchar(opts[1]); putchar(opts[2]); putchar('\0'); if (ac > 1) for (i = 1; i < ac; i++) { write_out(analyse_param(av[i]), opts); } else prompt(); } return 0; }
Partager