Bonjour,
J'aurais voulu savoir comment on convertissait une string en char*
Merci d'avance
Bonjour,
J'aurais voulu savoir comment on convertissait une string en char*
Merci d'avance
Je ne comprends pas ta question. Peux-tu donner un petit exemple ?
j'aurais voulu une fonction du genre :
char *ex = fonction("blabla");
Code : Sélectionner tout - Visualiser dans une fenêtre à part const char * ex = "blabla" ;
Plus précisément, le type « string » n'existe pas en soi en C. Une chaîne de caractères est considérée comme un tableau de caractères, de taille non déterminée à l'avance (la chaîne est terminée par le caractère spécial '\0').
Par conséquent, une chaîne est toujours transmise par l'intermédiaire d'un pointeur sur le premier caractère.
Du côté du compilateur, une chaîne écrite entre guillemets est considérée comme une expression de type « char const * ». Il n'y a donc aucune conversion préalable à effectuer.
Là je suis d'accord. Tu aurais même pu mettre EST à la place de "est considérée comme", ça aurait été plus correct.Envoyé par Obsidian
Ca par contre c'est très discutable : La taille d'un tableau peut être connue à tout moment. Les chaînes de caractères ne font pas exception. Et une chaîne entre guillemets est un tableau, pas un const char *. Ainsi, sizeof("poisson") vaut 8. Mais la conversion d'un tableau en const char * est, effectivement, implicite.de taille non déterminée à l'avance (la chaîne est terminée par le caractère spécial '\0').
(...)
Du côté du compilateur, une chaîne écrite entre guillemets est considérée comme une expression de type « char const * ».
transmise à une fonction par l'intermédiaire ...Par conséquent, une chaîne est toujours transmise par l'intermédiaire d'un pointeur sur le premier caractère.
le problème est que j'ai le warning suivant :
warning: deprecated conversion from string constant to 'char*'
En effet, il est fortement conseillé de considérer qu'une chaîne de caractères littérale (c'est-à-dire une chaîne entre guillemets) est un tableau en lecture seule, c'est-à-dire que l'on peut lire son contenu mais que l'on ne peut pas le modifier. Quand tu écris :
Tu pointes "le tableau" (en fait tu pointes juste sur le premier élément du tableau, mais c'est un abus de langage largement utilisé, même dans le document officiel qui décrit le langage C) avec un pointeur capable de modifier la donnée pointée. En effet *s = 'B' par exemple modifierait le premier 'b' de la chaîne en 'B'. Pour ne pas être tenté de faire cette horrible chose, il est fortement recommandé de déclarer le pointeur "const char *" et non "char *", ce qui signifie que le pointeur ne peut pas modifier la donnée pointée, ce qui est bien ce que nous cherchions. Un peu de lecture : Pointeurs constants et pointeurs sur constante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part char * s = "bla bla";
Partager