Invalid conversion from char to const char*

pierref17 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Peut être une formalité pour vous, mais un calvaire pour moi, je ne comprends pas mon erreur, j'ai tout essayé, mais ça me ressort à chaque fois ce "invalid conversion from char to const char*" sur la dernière ligne (au moment de choisir une lettre dans mon alphabet).

Mon programme est un peu plus complexe que les seuls lignes que vous voyez, mais le principe est ici :
char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};


TTF_Font *police = TTF_OpenFont("Times_New_Roman.ttf", 32);

SDL_Color blanc = {255, 0, 0};

texte = TTF_RenderText_Blended(police, alphabet[rand()%26], blanc);


J'ai essayé des choses de ce genre :
const char *alphabet = "abcdefghijklmnopqrstuvwxyz";


const char *alphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};


Si vous avez des suggestions, je suis ouvert !
J'ai regardé sur les forums, la majorité c'est du C++, donc je n'ai pas réussi à l'adapter...

Merci !
A voir également:

2 réponses

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Bonjour pierref17,


Le prototype de "TTF_RenderText_Blended" est, selon la documentation :

 3.4.9 TTF_RenderText_Blended


SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text, SDL_Color fg)

font
Font to render the text with. A NULL pointer is not checked.
text
The LATIN1 null terminated string to render.
fg
The color to render the text in. Pixels are blended between transparent and this color to draw the sntialiased glyphs.


Donc le 2ème argument doit être un pointeur sur char qui toit pointer vers une chaîne C (un ou plusieurs char terminés par '\0').

Or, tu passes un char, en passant
alphabet[rand()%26]
.

Pour résoudre ton problème, il te suffit de créer une chaîne C pouvant contenir ton caractère (et le caractère '\0' terminant la chaîne) et d'y mettre le caractère aléatoire que tu veux passer.

Quelque chose dans ce goût là :

    /* les chaînes sont dimensionnées pour accueillir le nombre

* de caractères attendu et, en plus, le caractère de fin
* de chaîne '\0'
*/
/* pour les 26 lettres de l'alphabet */
char alphabet[27] = "abcdefghijklmnopqrstuvwxyz";

/* pour une chaîne d'un caractère */
char st_lettre[2];

/* terminer la chaîne */
st_lettre[1] = '\0';

/* y mettre une lettre au hasard */
st_lettre[0] = alphabet[rand()%26];

/* passer cela a la fonction attendant une chaîne */
texte = TTF_RenderText_Blended(police, st_lettre, blanc);


Dal
1
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Désolé pour les sauts de ligne dans le code, il sont insérés d'office par CCM aujourd'hui.

Dal
0
pierref17 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour ton aide Dal ! ça marche impeccable !
Maudit \0 !
Je trouve ça quand fou de devoir créer une variable avec le caractère de fin de chaîne.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Il n'y a pas de variable de type chaîne de caractères en C. On est obligé de passer par un pointeur sur char ou un tableau de char. Bref il s'agit d'une succession de caractères. Il faut donc bel et bien définir une fin. Et oui, le C est un langage ancien :-).
0