Passage d'argement chaine

Signaler
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Je fais :
int taille(char chaine[])
{
    cout << chaine << endl;
 return (sizeof(chaine)/sizeof(chaine[0]));  
}

int main()
{
char pi[50]="3.1415926";
cout << taille(pi);
}



Et il m'affiche
3.1415926 // <- Là il affiche bien la chaîne entière
4 // <- Là il dit qu'il y a 4 caractères



si je colle "(sizeof(pi)/sizeof(pi[0]))"
dans le " cout << " de "main()" il m'affiche bien 50

HELP ME !!!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com

14 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
La taille d'un pointeur sur code 32 bits est bien de 4 octets, pas de prob. On ajoute un param 'size' a la func si besoin.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
"char chaine []" est pas un pointeur ?

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Quoi d'autre sinon ?

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
alors comment savoir la taille de ce qu'il pointe ?

PS : je croyais que c'étais une nouvelle variable ayant tout simplement pris le contenu de celle qui pointe

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
strlen

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
BruNews> Un pointeur c'est un push de 4 octets ?

Shell
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
TOUJOURS 4 octets pour TOUT param dans prog compile en 32 bits.
Ordinairement est PUSH mais possible en registre si func est __fastcall.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
dsl je veux pas savoir le nombre de caractère contenu mais simplement le nombres d'éléments maximum !!

Or avec strlen il m'indique 9 or moi je veux qu'il m'indique 50

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
Arrêtez de parler "chinois"

Il me semble que c'est de l'assembleur mais j'en ai jamais fait

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
IMPOSSIBLE que la func devine le nbr d'octets libres d'emploi a partir du pointeur, c'est pas la func
int ExtraLucide() que tu ecris.
Ajoute un param size comme dit plus haut.
Ben me voila epuise pour ce post, au prochain.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
on peut pas inventer une fonction pour ?

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Non je ne crois pas.
En fait quand tu passes par un pointeur tu indiques l'emplacement en mémoire du premier element. Ensuite pour ta chaine de caractere, le programme sait qu'il faut lire jusqu'a qu'il rencontre le caractere de fin de chaine qui correspond a '\0'. Mais en aucun cas il ne sait la taille allouée pour la variable en question.

Comme te la suggeré BruNews, passe la taille de ton tableau en parametre a ta fonction. C'est le plus simple a faire.

Shell
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
victorcoasne > quand tu passe un tableau en parametre, c'est une conversion implicite en pointeur

void func(char []) <-> void func(char *) ...

sizeof est un operateur qui retourne la taille d'une variable, 4 octet pour un pointeur et N * sizeof T pour T tab[N]

apprend qu'un pointeur et un tableau sont 2 choses differentes
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
C pas grave j'ai du contouner ça pour faire mon prog

merc à tous

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com