Stockage d'une valeur de fonction
Bonjour a tous,
Je suis confronté a un petit problème :
J'ai une fonction :
Code:
1 2 3 4 5 6
| char *options_mycat()
{
char *os;
os = "abcde";
return os;
} |
Et j'ai un main :
Code:
1 2 3 4 5 6 7
| int main()
{
char *opts;
opts = options_mycat();
puts(opts);
return 0;
} |
Puis j'affiche mon programme dans le terminal :
Code:
1 2 3 4 5
| "
prompt$ ./a.out
prompt$
" |
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 ?
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:
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;
} |