LINUX.ORG.RU

Непонятки с g_strsplit


0

0

Делаю поддержку drag-n-drop в своем просмотрщике и столкнулся чуть ли не с чудесами какими-то. Опыта разрулить не хватает.

По идее, tmps содержит указатель на данные, перетащенные в окно. В данном случае это строка из имен файлов, разделенных через «\n». Следующий код:

g_printf("%s \n", tmps);

печатает:

file:///home/tim/av1.png
 

Т.е. налицо 2 перевода строки. 1-й потому что является разделителем, а второй из g_printf. Это все понятно. Вроде так и должно быть. Дальше:

fns = g_strsplit(tmps,"\n",-1);
g_printf("%s \n", fns[0]);

Печатает вообще непонятную строку:

 ile:///home/tim/av1.png

Т.е. вместо первой буквы «f» печатается пробел. Причем, пробел из g_printf, видимо. Потому что если его оттуда убрать, то строка печатается нормально. Ну суть даже почти не в этом. А в том, что файл все-равно не открывается. Т.е. видимо там то ли управляющие последовательности какие-то, то ли просто мусор. И возникает это все именно после g_strsplit. Не понимаю.

На всякий случай, объвление переменных, а то непонятно, наверное:

gchar *tmps;
gchar **fns;
★★★★★

Последнее исправление: hibou (всего исправлений: 2)

Урра!!! Заработало!

В общем, суть была в том, что при перетаскивании списка файлов разделителем служит не 1 символ, а целая последовательность «\r\n». - Простейшее решение - заменить функцию g_strsplit на g_strsplit_set. Образующуюся пустую строку (между делимитерами «\r» и «\n») эта функция выкинет автоматически.

Ну все - допилил drag-n-drop в просморщике картинок, теперь он поддерживает еще и это. Чуть позже залью на svn.

Если что, то вот, что я тут пилю: http://tima-s.narod.ru/programs/japw/ - присоединяйтесь, кто хочет.

hibou ★★★★★
() автор топика
Ответ на: комментарий от k0l0b0k

:)

Извини, я тебе спасибо не сказал. - Вот говорю, спасибо! Хотя я подсмотрел последовательности через g_strescape. Но все-равно спасибо за готовность и желание помочь! :)

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

да не за что вообще.
самое лучшее решение проблемы - сделанное самостоятельно)

k0l0b0k ★★
()
Ответ на: комментарий от k0l0b0k

> ооо, щас начнется нытье о том что авторы гнома = виндузятники.

Это только если К.О. почтит нас своим присутствием. 8))

kemm
()
Ответ на: комментарий от k0l0b0k

Кстати, вот интересно, как формируют строку с именами файлов при перетаскивании Qt/KDE приложения. Будет ли моя программа работать в KDE-среде?

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

судя из примера g_strsplit_set будет:

The result if g_strsplit_set (":def/ghi:", ":/", -1) is a NULL-terminated vector containing the four strings "", «def», «ghi», and "".


длину пути проверить стоит, думаю.

k0l0b0k ★★
()
Ответ на: комментарий от hibou

Думаю что эта проблема решается на уровне gtk, вам ничего менять не надо.

vertexua ★★★★★
()
Ответ на: комментарий от hibou

>при перетаскивании списка файлов разделителем служит не 1 символ, а

целая последовательность «\r\n»


Что, не мог промолчать?

А ещё модератор.

ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.