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

Signaler
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
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

Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
void traiteChaine(char*str)
{
str[1] = 'e';
}

void main()
{
char maChaine[] = "coucou";
traiteChaine(machaine);
}
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Pour toutes ces manipulations pourquoi tu utilises pas le type string ?
Type qui contient pamal de fonctions pour ce genre de chose.
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ah du C à l'ancienne :) quel idée ^^