преобразование массива символов в const gchar * - PullRequest
0 голосов
/ 10 мая 2010

У меня есть массив символов, который содержит строку:

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

Я хочу передать эту строку в качестве аргумента функции gtk_text_buffer_insert, чтобы вставить ее в GtkTextBuffer. Я не могу понять, как преобразовать его в const gchar *, что gtk_text_buffer_insert ожидает в качестве третьего аргумента.

Кто-нибудь может мне помочь?

Ответы [ 3 ]

7 голосов
/ 10 мая 2010

gchar это просто typedef для char, и преобразование из массивов в константные указатели неявно, так что вы можете просто передать его:

someFunctionExpectingConstGcharPointer(buf);

Обратите внимание, что вы также можете напрямую инициализировать массивы строковыми литералами:

char buf[MAXBUFLEN] = "foo";
1 голос
/ 23 февраля 2011

Это может быть очень поздно, но в случае, если кто-то еще застрял с этим, придите с Google:

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

должен сделать свое дело. Проблема в нулевом символе на конце. Таким образом, отправляя длину строки, вы отправляете все символы перед нулевым символом.

1 голос
/ 10 мая 2010

Ну, посмотрим. GTK + справочное руководство говорит:

gtk_text_buffer_insert ()

void gtk_text_buffer_insert (буфер GtkTextBuffer *, GtkTextIter * iter, const gchar * text , gint len);

Вставка длинных байтов текста в позиции iter. Если len равно -1, текст должен заканчиваться нулем и будет вставлен целиком. Испускает сигнал «вставка текста»; вставка фактически происходит в обработчике по умолчанию для сигнала. iter становится недействительным, когда происходит вставка (потому что содержимое буфера изменяется), но обработчик сигнала по умолчанию повторно проверяет его, чтобы он указывал на конец вставленного текста.

буфер: GtkTextBuffer
iter: позиция в буфере
текст: текст в формате UTF-8 для вставки
len: длина текста в байтах или -1

и

gchar
typedef char gchar;
Соответствует стандартному типу C char

Это означает, что вместо gchar * можно использовать char *.
Хотя я не использовал gtk_text_buffer_insert (), но в других функциях gtk +, требующих gchar *, char * работал безупречно.

Надеюсь, это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...