convertir un tableau de caractères en const gchar *

J’ai un tableau de caractères qui contient une chaîne:

char buf[MAXBUFLEN]; buf[0] = 'f'; buf[1] = 'o'; buf[2] = 'o'; buf[3] = '\0'; 

Je cherche à passer cette chaîne en tant qu’argument à la fonction gtk_text_buffer_insert afin de l’insérer dans un GtkTextBuffer . Ce que je ne peux pas comprendre, c’est comment le convertir en const gchar * , ce à quoi gtk_text_buffer_insert s’attend en tant que troisième argument.

Quelqu’un peut-il m’aider?

gchar est juste un typedef pour char et la conversion de tableaux en const pointeurs est implicite, vous pouvez donc simplement le transmettre:

 someFunctionExpectingConstGcharPointer(buf); 

Notez que vous pouvez également directement initialiser des tableaux avec des littéraux de chaîne:

 char buf[MAXBUFLEN] = "foo"; 

Voyons voir. Le manuel de référence GTK + dit:

gtk_text_buffer_insert ()

void gtk_text_buffer_insert (tampon GtkTextBuffer *, GtkTextIter * iter, const gchar * text , gint len);

Insère len octets de texte à la position iter. Si len vaut -1, le texte doit être nul et sera inséré dans son intégralité. Émet le signal “insert-text”; l’insertion se produit réellement dans le gestionnaire par défaut du signal. iter est invalidé lors de l’insertion (car le contenu de la mémoire tampon change), mais le gestionnaire de signal par défaut le revalide pour qu’il pointe vers la fin du texte inséré.

tampon: un GtkTextBuffer
iter: une position dans le tampon
texte: texte au format UTF-8 à insérer
len: longueur du texte en octets ou -1

et

Gchar
typedef char gchar;
Correspond au type de caractère C standard

Cela signifie qu’un caractère * peut être utilisé à la place de gchar *.
Bien que je n’aie pas utilisé gtk_text_buffer_insert (), mais dans d’autres fonctions de gtk + nécessitant gchar *, char * a parfaitement fonctionné.

J’espère que c’était utile.

C’est peut-être vraiment tard, mais au cas où quelqu’un d’autre restrait coincé ici viendrait ici avec un google:

 gtk_text_buffer_insert(GTK_TEXT_BUFFER(textbuffer),&iter,buffer,strlen(buffer)); 

devrait faire l’affaire. Le problème est le caractère nul à la fin. Donc, en envoyant la longueur de la chaîne, vous envoyez tous les caractères avant le caractère nul.