Pb de transfert chaine

Résolu
diwy72 Messages postés 5 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 5 mars 2008 - 5 mars 2008 à 18:18
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 - 5 mars 2008 à 22:35
Bonjour,

J'apprend actuellement le languge C et je m'entete a faire fonctionner une routine.
Je voudrais via un prototype et pointeur transferer une chaine de caractere.
le resultat, j'ai un seul caractere qui est transferer ????

Merci de votre aide
voici me code (tout simple a mes yeux!!)

NB: Je travaille avec devc++ ou code block etle source ne fonctionne sur aucun et pas de defaut de compil...

#include <stdio.h>
#include <stdlib.h>

int num(char *s);

int main(int argc, char *argv[])
{
 
  
 char lire[100]={};
 
 if (num(lire)!=1)
 {
   printf("pb envoie car");
}
else
{
    printf("le mot du prototype est :: %s \n",lire);
}
 
  system("PAUSE");   
   return 0;
}

int num(char *s)
{
    char mot[8]="BONJOUR";
    *s=*mot;
    return 1;
}

8 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 mars 2008 à 21:10
int num(char *s)
{
    strcpy(s, "BONJOUR");
    return 1;
}

Voilà tout.

"je ne comprends toujours pas pourquoi je n'arrive pas a lire "Bonjour"

car apparement dans le principe ecriture, je semble etre bon???"


Non. On écrit rien dans un tableau de la sorte. Si tu utilises des
pointeurs, la seule chose que fera i = j est de faire pointer i sur j
et donc, toute modification sur j se verra à partir de i. Aucune copie
de données ne sera faite.


De plus, passer un pointeur en argument d'une fonction ne fait que
passer l'adresse contenue dans le pointeur et non l'adresse du
pointeur. On ne peut donc pas modifier l'adresse du pointeur passé en
argument. La seule façon de faire cela est de passé l'adresse du
pointeur mais ici, ça ne sert à rien donc je ne détaillerai pas.

Ensuite, déclarer une variable dans une fonction suppose qu'elle sera
détruite à la sortie de la fonction. Ceci fait que retourner un tableau
déclaré, par exemple, dans une fonction est impossible puisqu'il sera
"détruit".

Même principe pour les pointeurs. On peut faire pointer un pointeur
externe sur un tableau locale mais dès la sortie de la fonction, ce
tableau n'existera plus et donc, le pointeur externe ne pointera sur
plus rien de valide.

C++ (@++)<!--
3
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
5 mars 2008 à 19:19
Salut,

essaye s = mot pour afftecter l'adresse de la chaine mot dans le pointeur s, car *s signifie s[0]..
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 mars 2008 à 20:34
[auteur/CHATBOUR/828664.aspx Chatbour] >> Ben non. Tout ce qu'on va faire c'est faire pointer le paramètre s sur mot et non l'argument lire. Deplus, la variable mot sera "détruite" à la fin de la fonction num alors...

Pour copier une chaine dans une autre, on utilise strcpy.

C++ (@++)<!--
0
diwy72 Messages postés 5 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 20:36
Merci CHATBOUR, mais j'avais deja testé cette solution mais elle me donne rien en retour....

je ne comprends toujours pas pourquoi je n'arrive pas a lire "Bonjour"
car apparement dans le principe ecriture, je semble etre bon???

merci pour les infos a suivre
0

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

Posez votre question
diwy72 Messages postés 5 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 21:07
SAKingdom

comment utilise t on un strcpy dans un prototype??
car j'ai ecris le prg de cette facon car je voudrais placer le prototype dans un module externe

merci pour la reponse
0
diwy72 Messages postés 5 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 21:31
Merci beaucoup SAKINGDOM

ce probleme m'embetait depuis une semaine, tu m'as retirer un grosse epine du pied et je vais pouvoir continuer dans mon petit projet de debutant ( un jeu du pendu avec recherche aleatoire dans un fichier texte)

A BIENTOT
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
5 mars 2008 à 21:35
"On ne peut donc pas modifier l'adresse du pointeur passé en argument."
À remplacer par:
"On ne peut donc pas modifier l'adresse contenue dans le pointeur passé en argument."

C++ (@++)<!--
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
5 mars 2008 à 22:35
Salut à tous

Désolé pour la fausse solution j'avais pas le temps pour tester et je me suis contenté de donner mon idée..
0
Rejoignez-nous