[C] Passage de tableau par adresse (réference)

cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 20 avril 2005 à 16:47
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 20 avril 2005 à 23:45
Bonjour,

Je sais que la question a été posée sous des angles différents mais rien n'y fait.
J'aimerais passer mon tableau de char à ma fonction par adresse, et ça plante:
(de quel type sont les pointeurs ?)

void traiteChaine(char*str) { // ma fonction
&str[1] = 'e';
}

void main() {
char maChaine[] = "coucou";
traiteChaine(&machaine);
}

Ca plante !

David, à VERSAILLES

7 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
20 avril 2005 à 17:05
Salut,

J'avais fait une source montrant le passage d'une structure d'un tableau dans une dll. Il te suffit de regarder le code et de faire copier/coller.

@+
Arnotic,
Admin CS, MVP Visual C++
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
20 avril 2005 à 17:21
void traiteChaine(char*str)
{
str[1] = 'e';
}

void main()
{
char maChaine[] = "coucou";
traiteChaine(machaine);
}
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 avril 2005 à 17:28
Salut Arnotic,

Merci, c résolu.

En fait j'ai vu que tu mîtrisait les pointeurs, malgré avoir lu ta source, je bloque, peux tu m'aider stp.

J'ai une chaine que je vourdrais nettoyer:
de: str = "un;deux ;trois";
Je voudrais faire: str = "un;deux;trois";

J'ai essayé strrchr mais sans résultat, je me suis fait cette fonction:
void traiteChaine(char *str) { // lMaxFic
int i,passe=0;
char tmp[lMaxCode],*ptr;


//ptr = strrchr(str,';');
if (ptr) {
for (i=strlen(str)-1;i>=0;i--) {
if ((passe==1) && (str[i]!=' '))
break;
if (str[i]==';') {
ptr = &str[i];
passe = 1;
}
}
&str[i++] = ptr; // La ca plante
}
}

En fait, je voulais récuperer l'adresse d'ou il faut reprendre pour la coller à la ou il faut arreter mais ça plante, as tu une idée ?

David, à VERSAILLES
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 avril 2005 à 17:34
Heuuuu, je vous la remet en plus propre.
En fait, je voulais faire du raboutage:

void traiteChaine(char *str) { // lMaxFic
int i,passe=0;
char *ptr;


for (i=strlen(str)-1;i>=0;i--) { // On parcours la chaine en partant de la fin
if ((passe==1) && (str[i]!=' ')) // La ou il faut arreter, on stoppe
break;
if (str[i]==';') { // La ou il faut reprendre, on garde le pointeur
ptr = &str[i];
passe = 1;
}
}
&str[i++] = ptr; // on réaffecte le pointeur
}

David, à VERSAILLES
0

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

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 avril 2005 à 18:32
Pour toutes ces manipulations pourquoi tu utilises pas le type string ?
Type qui contient pamal de fonctions pour ce genre de chose.
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 avril 2005 à 22:31
que veux tu dire par la ? la bibliotheque <string.h> ?

sinon, je ne vois pas ce que tu veux dire, il n'y a pas de type string en C (c'est du c à l'ancienne)

David, à VERSAILLES
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 avril 2005 à 23:45
Ah du C à l'ancienne :) quel idée ^^
0
Rejoignez-nous