Bonjour a tous,

Je suis confronté a un petit problème :

J'ai une fonction :

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;
}
Et j'ai un main :

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;
}
Puis j'affiche mon programme dans le terminal :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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;
}