Afficher contenu char*

Signaler
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
-
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
-
salut
j'ai un souci pour afficher le contenu d'un variable de type char *.
de l'aide svp.


Cordialement

12 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
printf(chaine);

Rien de compliqué là-dedans ...
Elle doit évidemment de terminer par le caractère \0

---
VB.NET is good ... VB6 is better
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Je pense qu'il vaut mieux faire : printf("%s",chaine);
Car si par hasard la chaine contient des caractères %, ça risque d'afficher un peu n'importe quoi.
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
4
Je vois que j'ai mal expliqué : dsl

le probleme c'est que j'appel une methode dans une dll ecrit en c#, et cette derniere me renvoie un char*, alors là où j ai le probleme. avec un
cout<<resultat;
ça donne pas de résultat.


A vs
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Une méthode qui renvoit un char* c'est suspect déja. Qui a fait l'allocation pour ce char*? Si c'est alloué en local dans la méthode appelée, c'est normal que ca ne fonctionne pas.

En général tu passes ton buffer en paramètre, et la méthode appelée le remplit.

_____________________________________
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

printf(chaine)

Non, non ,non ... NON !
Evitez même de penser à ça.
A force de le voir, on finit par le faire, et Bonjour les trous de sécurité !
N'oubliez pas que le premier argument de printf est INTERPRETE !

Faites
const char *machar = "pouet tagada tsointsoin";

printf("%s",machar);


Merci !

; I'm just keeping the hopeless cross to increase the meaninglessness
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
4
oui ok, mais :
Remarque : j utise le cout (c++).
la fonction de la dll c++ me renvoie un char* :
a l'appel de cette derniere :

char* c = fct();
cout<<c; --> ça donne erreur (du type memoire, on faite je pense)
cout<<&c; --> donne l'adresse de la chaine renvoyer


ça c'est un probleme bloquant pr moi, svp de l'aide
A vs
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Pour le printf() tout ce qu'on risque s'il y a un %d ou autre qui traine c'est un crash stack (le return se fait on-ne-sait-où). Mais bon quand on sait pas à quoi s'attendre c'est vrai que printf("%s",chaine) est mieux. On va dire que j'y avais plus pensé

---
VB.NET is good ... VB6 is better
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
wislam2007> Réponds a mes questions ca fera peut être avancer ton problème.


_____________________________________
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
4
dsl j ai pas compri ce que tu veut dire par buffer en parametre?

A vs
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
En fait l'important est de savoir comment est allouée la mémoire sur laquelle ton résultat pointe.

Dans un premier temps, essaie ceci par exemple :

char* fct()
{
  char* res = new char[32];
  strcpy(res, "Bonjour");
  return res;
}


_____________________________________
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

Un petit passage pour montrer ce qu'on peut faire avec un printf(c) -> lire et écrire ou on veut dans la mémoire de ton programme... pour peu que c provienne du réseau hop tu prend le controle d'une machine en écrivant du code
assembleur apres le printf()

http://www.bases-hacking.org/?url=format-strings

Bon là encore, sous linux ça passe rarement (les pages de codes sont souvent en lecture seule), windows est plus vulnérable.


; I'm just keeping the hopeless cross to increase the meaninglessness
Messages postés
62
Date d'inscription
dimanche 1 octobre 2006
Statut
Membre
Dernière intervention
21 mars 2010
4
vecchio56>

oui c'est ok pour la testé dans un programme, mais si cette fonction fait partie des fonction exportées dans un dll, comment doit-je appelé cette fonction?

quand je fait :
char* c = fct();


ça donne pas les résultat souhaité.
$est ce que je doit passer par un type spécial?




A vs