LINUX.ORG.RU

GTK+2 и си


0

0

Народ, пожалуста помогите мне, кто знает си и имеь дело с gtk-кодингом. Дело в том, что мне надо скопировать определенную часть(начиная с новой строки и заканчивая '['(не включая символ '[')) массива gchar в другой массив gchar. Переменную gc(тип ghar) я объявил и всунул туда текст выше(так что не надо говорить, что, мол, забыл объявить gc). Проблема: все компилится и запускается, но при выполнении участка кода (см. ниже) прога вылетает в segmantation fault, хотя нужный текст выводится в консоль(см. "g_printf("Part to show: %s",part_to_show);"). Код:

	gchar part_to_show[]="";
	gint begin,end,gi,gj;
	gboolean found_begin=FALSE,found_end=FALSE;
	/**********/
	for(begin=0;begin<=strlen(gc);begin++)
		if(gc[begin]=='\n'){begin=begin+1;found_begin=TRUE;break;}
	for(endt=0;end<=strlen(gc);end++)
		if(gc[end]=='['){found_end=TRUE;break;}
	/**********/
	if((found_begin==TRUE)&&(found_end==TRUE)){
		for(gi=begin,gj=0;gi<=end;gi++,gj++)
			part_to_show[gj]=gc[gi];}
	g_printf("Part to show: %s",part_to_show); //check

ЗЫ прошу зря не срать в форум, всмысле, если вы не шарите в си, то лучше промолчите, а не говорите ченить эффектное, как-то "подучи си", не придирайтесь к грамматическм ошибкам (для этого у нас в школе есть соответствующая учительница русского языка), вообщем если вы осознаете, что ваше сообщение не принесет никакой пользы, то лучше забейте на мой пост.
anonymous

Блин, достали ваши ЗЫ, да и тема эта достала.

Вобщем так, если Вы передаете строку g_print, она должна быть строкой,
 то есть заканчиваться на '\0', посему даже если Вы правильно 
выделили память под эту строку, в чем я сомневаюсь, можно было бы
написать.


part_to_show[gj]='\0';

g_print("Part to show %s", part_to_show);

А вообще нормальные программеры решают Вашу задачу по-другому, так Вам нужно 
посоветовать все-таки подучить C и библиотеки.
gchar *result;
gchar *begin;
 gchar *end;

begin = g_strrstr(gc, "\n");
end = g_strrstr(begin,"\n");

if ((begin != NULL) && (end != NULL))
   {
   result = g_strndup(begin + 1, end - begin-1);
   g_print ("Found %s", result);
   g_free(result);
   }
   else
   {
   g_printf ("Not found");
   } 

anonymous
()

Sorry g_strrstr (begin, "[");

anonymous
()

Посмотри внимательнее на:
gchar part_to_show[]="";

а потом на:
part_to_show[gj]=gc[gi];

и поймеш откуда segmentation fault

Delay ★★
()

Да нет, segfault в программе в g_print, иначе бы ничего не печаталось.

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