Bonjour,
Dans un programme j'aimerais faire retourner une chaîne par une fonction.
J'ai trouvé ceci dans la FAQ :
Pour retourner une chaîne de caractères, il faut passer à la fonction un pointeur en paramètres et copier la chaîne dans la zone mémoire pointée (avec strcpy() par ex.).

Une autre façon de faire est de déclarer la fonction comme retournant un pointeur sur des caractères et d'allouer la mémoire dans la fonction sans la libérer dans celle-ci, mais dans la fonction appelante.
Seulement j'aurais bien aimé un exemple avec, parce que j'ai du mal à saisir.


Mon programme :
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
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void concatener()
{
 
    int ret;
    char temp[20];
    char axe1[5];
    char axe2[5];
    char axe3[5];
    char axe4[5];
    char envoi[21];
 
    /* Saisie du clavier vers axe1, grâce à fgets */
    do
    {      
      if (ret != 1) printf("Axe 1 : ");
      fflush (stdout);
      fgets (axe1, sizeof axe1, stdin);      
      ret = sscanf (axe1, "%[0-9-]s", temp);
    }
    while (ret != 1);
 
    /* Saisie du clavier vers axe2, grâce à fgets */
    do
    {      
      if (ret !=1 ) printf("Axe 2 : ");
      fflush (stdout);
      fgets (axe2, sizeof axe2, stdin);      
      ret = sscanf (axe2, "%[0-9-]s", temp);
    }
    while (ret != 1);
 
   /* Saisie du clavier vers axe3, grâce à fgets */
    do
    {     
      if (ret !=1 ) printf("Axe 3 : ");
      fflush (stdout);
      fgets (axe3, sizeof axe3, stdin);      
      ret = sscanf (axe3, "%[0-9-]s", temp);
    }
    while (ret != 1);
 
   /* Saisie du clavier vers axe4, grâce à fgets */
    do
    {
      if (ret !=1 ) printf("Axe 4 : ");
      fflush (stdout);
      fgets (axe4, sizeof axe4, stdin);      
      ret = sscanf (axe4, "%[0-9-]s", temp);
    }
    while (ret != 1);
 
    /* envoi va contenir T + axe1 + axe2 + axe3 + axe4 + 2048 */ 
    sprintf(envoi, "T%s%s%s%s2048", axe1, axe2, axe3, axe4);
}
 
int main ()
{
    char coordonnees[21];
    concatener();
    return 0;
}
Ici la fonction concatener ne retourne rien.
J'aimerais lui faire retourner la chaîne envoi dans la fonction main, à coordonnes.
Quels changements dois-je appliquer ?
Je vous remercie