Pb avec fonction retournant chaine de caractères

dragon3x6 Messages postés 14 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007 - 16 juin 2004 à 18:20
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 18 juin 2004 à 20:52
Bonjour,

peut - on retourner une chaine de caracteres avec une fonction ?

j'ai ecris une fonction qui renvoie une chaine de caracteres du type 'char chaine[30]'

ex:

char func()[30]
{
return chaine;
}

et le compilateur me répond

error C2090 function returns array

SVP, comment fait - on pour renvoyer une chaine de caracteres avec une fonction.

Merci d'avance.

14 réponses

bipcpp Messages postés 40 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 2 mai 2010
16 juin 2004 à 18:52
peut-être avec : char[30] function(...)
ou avec un pointeur de char.

Perso j'utilise plutôt les string de la STL.
0
dragon3x6 Messages postés 14 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007
16 juin 2004 à 18:57
pourrais - tu m'expliquer comment utiliser les string de la STL STP
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juin 2004 à 19:15
en C on ne retourne pas une chaine sinon il faut faire une alloc dans la fonction et retourner le pointeur alloue. C'est contre productif.
Mets un par char* a ta func (tu demandes le buffer a remplir).

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 juin 2004 à 20:44
oui, en param, et tu peux egalement le retourné

char *func(char *str)
{
...
return str;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
17 juin 2004 à 09:58
Juste une précision Brunews,

pourquoi c'est mieux de faire :
void rempliBuffer(char * buffer)
{
// remplissage
}

char *buff;
buff = new char[50];
rempliBuffer(buff);
// traitement
delete buff;

plutot que
char * rempliBuffer()
{
char * buffer = new char[50];
// remplissage
return buffer;
}

char *buff;
buff = rempliBuffer();
// traitement
delete buff;


qu'est-ce qui est contre productif ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 juin 2004 à 10:14
Parce que tu es certain de faire alloc desalloc a chaque appel alors que la fonction pourrait etre appelee 1000 fois de suite et on ne fait alloc qu'1 fois (et encore, le buffer peut etre mis sur pile et en ce cas aucune alloc).

ciao...
BruNews, Admin CS, MVP Visual C++
0
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
17 juin 2004 à 10:46
oui, dans ce cas là bien sur ...
ca dépend tout d'abord du but recherché de la fonction, une histoire de conception

a+
0
dragon3x6 Messages postés 14 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007
17 juin 2004 à 11:39
Merci à tous,

finallement, j'avais trouvé que je pouvais retourner l'adresse de la chaine de caractères plutôt que la chaine elle - même.

Je n'ai pas encore les bons reflexes ! (mais ça commence à rentrer)

En fait, je suis en train de programmer un jeu avec la SDL et la programmation objet que vous devrez prochainement voir dans les codes sources de CPPFrance.com.

Encore merci pour le nombre des réponses qui m'offrent des alternatives.

Longue vie à CPPFrance
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 juin 2004 à 16:31
si tu fait ca en c++, utilise std::string et te fais pas chier avec les char*

mais cce qui est genant c'est que tu ne semble pas avoir compris les tableaux...
tu devrais lire un cour la dessus

http://cowww.epfl.ch/infgmel/doc/coursCpp/book1.html
0
dragon3x6 Messages postés 14 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007
18 juin 2004 à 14:48
Merci,

pour les tableaux, je comprend que une chaine declaré char chaine[30] se comporte comme un tableau de 30 elements

sinon je vais donner ma solution:

char *function()
{
char *chaine;
chaine = new char;
strcpy(chaine,"ce que vous voulez retourner");
return chaine;
}

Pour le std::string, je vais me renseigner car je ne connais pas du tout (je ne sais pas comment l'utiliser?!).
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juin 2004 à 14:57
djl > je te laisse rediger la correction, j'en ai mal aux doigts d'avance.

ciao...
BruNews, Admin CS, MVP Visual C++
0
dragon3x6 Messages postés 14 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 21 juin 2007
18 juin 2004 à 15:35
Salut,

lorsque je declare une variabe std::string chaine; il me met:

error C2653: 'std' : is not a class or namespace name
error C2065: 'string' : undeclared identifier

malgrès que lorsque je tape les deux deux points il m'affiche une liste déroulante où figure string.
0
bipcpp Messages postés 40 Date d'inscription mardi 18 mai 2004 Statut Membre Dernière intervention 2 mai 2010
18 juin 2004 à 17:39
// a compiler en C++
#include <string>
using namespace std;

string function()
{
return "ce que vous voulez retourner";
}

main() ou winmain() .....
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 juin 2004 à 20:52
BruNews > moi aussi j'ai pas le courage de le faire, ca part de trop loin :D
0
Rejoignez-nous