Comment retourne-t-on une chaine de caractère en C ?

Résolu
tekila_bandita Messages postés 248 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 15 mars 2007 - 25 nov. 2005 à 18:19
tekila_bandita Messages postés 248 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 15 mars 2007 - 26 nov. 2005 à 18:49
Je débute et j'aimerais savoir commen faire pour retourné une chaine de caractère en C...
j'aimerais quelques exemples simples svp...

MERCI ! ;)

14 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 nov. 2005 à 18:38
char * Fonction()

{

char Chaine[10] = "";

//...

//Traitement(s) sur la chaine de caractères.

//...

return Chaine;

}

J'espère que ça répond à ta question.


YOYO, @+.
YOYO
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 nov. 2005 à 19:24
yoyo269 > Faire gaffe à ne pas transmettre nimporte quoi à ceux qui commencent, on ne concatène RIEN sur une constante.

En C on a l'habitude de recevoir le buffer destination, ça évite les fuites mémoire. On ne 'retourne' donc pas la chaine mais seulement un pointeur sur un buffer reçu.

char* MyConcat(char *psz, const char *chaine)
{
strcat(psz, chaine);
return psz;
}

char buf[60];
strcpy(buf, "Salut ");
MessageBox(0, MyConcat(buf, "la foule"), "OHE", 0);

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
25 nov. 2005 à 18:27
je ne comprend pas tout a fait ta question mais voici un petit exemple ca pourra peut etre t'aider



#include <stdio.h>

char buffer[256] //on fait une chaine de 256 caracteres



//affichage ce qu'il ya entre guillemets et saute une ligne

printf("que doit on mettre dans buffer:\n ");



//enregistrement de ce que l'on tape dans le buffer

gets(buffer);
.

//retour a l'ecran

printf("votre texte est: %s",buffer);





(si c'est bien ca alors il suffit en fait de mettre % et une lettre
puis fermer les guillemets et mettre une virgule puis sur quoi on doit
se baser, s'il y a plusieurs variable tu met plusieurs virgule et les
noms dans l'ordre ou ca doit paraitre)



%s = chaine de caractere

%c = char de juste une lettre

%d = int (decimal)

%x = octal (j'en suis plus sur de sa mais j'crois) c'est vachement bien pour convertir une chaine





voila si ca n'a pas repondu a ta question merci d'expliquer ce que tu
recherche vraiment et puis si c'est bon bein valide la reponse :)



c'est les principaux
0
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008
25 nov. 2005 à 18:37
D'apres ce que je comprend, tu veut savoir si une fonction peut retourner une chaine de caracteres ?
La reponse est non, du moin, pas de la maniere classique. Il faut faire un passage de parametres par adresse.
Exemple:

void FonctionChaine(char* chaine)
{
chaine = "nouvelle phrase"
}

main ()
{
char MaChaine[256] = "la belle phrase";

FonctionChaine(MaChaine);
}

Voila, apres appel a la fonction, ta chaine vaut "nouvelle phrase".
0

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

Posez votre question
tekila_bandita Messages postés 248 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 15 mars 2007 33
25 nov. 2005 à 18:42
Enfaite, par exemple, j'aimerais pouvoir créer une fonction de concaténationne requiérant que deux arguments : la chaine 1, et la chaine 2. La chaine 2 sera concaténée à la suite de la chaine 1 et la chaine reultante serai retourné par la fonction... je ne sais pas si c'est possible mais bon...

exemple :

printf("resultat : %s ", concat("hello", " !")) ;

voila !
j'espere avoir été clair...

Merci !
;)
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 nov. 2005 à 18:45
Oh que si c'est possible.
char c1 "chaine1", c2 "chaine2";
strcat(c1, c2);

Résultat : c1 = chaine1chaine2
T'as plus qu'à t'aider de ce qui t'as été donné et voilà.

YOYO, @+.
YOYO
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 nov. 2005 à 19:27
Merci de préciser BruNews !

YOYO, @+.
YOYO
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
25 nov. 2005 à 19:29
Salut,

yoyo, ce que tu dis est enorme et completement faux.

On ne peut pas retourner une variable locale, car celle ci est automatiquement détruite a la fin de l'execution de la fonction.

On ne peut pas faire "strcat(c1, c2);" sur deux chaines sauf si c1
contient assez d'espace libre pour contenir c2 (ce qui n'est pas le cas
dans ton exemple...).



Pour retourner une chaine d'une fonction, soit on alloue un buffer
dynamiquement avec malloc, soit on déclare un buffer local static, puis
on retourne l'adresse de ce buffer.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 nov. 2005 à 19:45
Oula! yoyo en a pris pour son grade!
0
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
25 nov. 2005 à 20:10
vous tirez pas dessus non + lol :)
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 nov. 2005 à 20:28
LOL ! t'inquiètes shadow1779 !
C'est normal ce qu'ils ont dit, j'avais pas trop fait gaffe à ce que j'avais écrit.
Heureusement qu'ils m'ont corrigé.
Merci les gars.

YOYO, @+.
YOYO
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
25 nov. 2005 à 23:34
Bof, ya pas mieu que strncat(), a si: vsprintf()
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 nov. 2005 à 23:46
Mieux pour amuser le processeur ?

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
tekila_bandita Messages postés 248 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 15 mars 2007 33
26 nov. 2005 à 18:49
Merci bien, j'ai trouvé ma réponse...
Mais ce que je voulais c'était comment retourné une chaîne et non une fonction pour concaténer 2 chaines....

MERCI !
0
Rejoignez-nous