LINUX.ORG.RU

atoll, грабли, не пойму где наступил.


0

0

Господа, давече пытался конвертнуть строку в long long, но вот что-то
 не полетело сие у меня, вот фрагмент кода:

					GSQL_DEBUG ("G_TYPE_INT64 displaying: gchar_value=%s",gchar_value);
					gint64_value  = g_malloc (sizeof(gint64));
					*gint64_value = 0;
					*gint64_value = (gint64) atoll (gchar_value);
					GSQL_DEBUG ("G_TYPE_INT64 displaying: gint64_value=%d",*gint64_value);
					/* FIXME: atoll doesn't work correct  :(
					** (lt-gsql:29159): DEBUG: G_TYPE_INT64 displaying: gchar_value=6848377337
					** (lt-gsql:29159): DEBUG: G_TYPE_INT64 displaying: gint64_value=-1741557255
					*/
					
					g_free (gchar_value);
					return gint64_value;

как видно в камменте FIXME, в выхлопе я пытаюсь из строки вида 
"6848377337" получить число, но где-то происходит косяк и в переменную 
 gint64 попадает левое число, такое ощущение, что происходит 
переполнение числа и оно в минус уходит. может кто подскажет, где 
лучше покопать? а то уже мысли кончились.
Deleted

Ответ на: удаленный комментарий

Кароч, я дурак. Во-первых - просто выспаться надо было :), во-вторых - сижу тут сам с собой общаюсь :))

объясню. первый затуп был в том, что я в дебаге принтовал через %d, 
что нельзя делать с "длинными" целыми. Дальше я в другом месте ступил.
 Дело в том, что я заполняю этими данными GtkListStore, но прежде чем 
заполнить я формирую поля функцией

gtk_list_store_insert_with_valuesv (liststore_new, NULL, -1,column_pos, values, var_count);

где values - массив с инициализированными типами. А ошибка моя была в том, что я кастонул (копипастом :) ) gint64 в gint

    case G_TYPE_INT64:
		GSQL_DEBUG ("var_types[%d] = G_TYPE_INT64", i);
		g_value_set_int64 (&values[i], *((gint *) disp_value));
		break;

разумеется "(gint *) disp_value" должно быть вида "(gint64 *) disp_value"

вот собсно и весь расклад. Еще раз извиняюсь за беспокойство :)

Deleted
()
Ответ на: комментарий от AlexLorovitch

а зачем? :) если я пишу в окружении glib'а, то и типы использую глибовские.

те две ошибки, что я допустил, сами по себе глупые :), так что хоть gint64 подсунь, хоть long long :)

Deleted
()
Ответ на: комментарий от fxup

>Какое же убожество, это GTK...

мальчик, ты уроки выучил? для начала хотя б разницу между glib и gtk узнал.

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