Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ GTK+ _ преобразование типов

Автор: baunts 7.9.2011, 10:16

1 int value = 1111111;
2 char str[20] = {'\0'};
3 sprintf (str, "%d", value);
4 gtk_entry_set_text ( GTK_ENTRY (entry), str );

есть ли решение поприличнее (короче и универсальнее) 2и3 строк?

Автор: Алексей1153 7.9.2011, 12:44

sprintf_s лучше использовать :) Там можно максимальную длину приёмника указать

std::string s(20,0);
sprintf_s(&s[0],s.size(),"%d",1111111);

//s.c_str() - строка
gtk_entry_set_text ( GTK_ENTRY (entry), s.c_str() );


а как в GTK+ покороче - не знаю. В Qt и в MFC только знаю ))

Как выход, могу предложить добавить глобальную функцию, принимающую число и заполняющую контейнер с текстом

Автор: BRE 7.9.2011, 13:06

Цитата(Алексей1153 @ 7.9.2011, 13:44) *
sprintf_s лучше использовать :) Там можно максимальную длину приёмника указать

Лучше использовать стандартный snprintf, вместо не портабельной поделки микрософта. ;)

Автор: Алексей1153 7.9.2011, 16:57

BRE, может быть )

кстати, в std , может, своя печаталка есть, только я никогда не заморачивался и не искал

Автор: Iron Bug 8.9.2011, 10:50

Цитата(Алексей1153 @ 7.9.2011, 19:57) *
BRE, может быть )

не может быть, а абсолютно точно. в кроссплатформе надо избегать непортабельных частных реализаций. под другими системами этих XXX_s функций нет и можно нарваться на проблемы. если очень хочется, можно определить макросы, конечно. чтобы под вендой был sprintf_s, а под линём - sprintf. но это тоже довольно хитрый макрос надо писать.

Цитата(baunts @ 7.9.2011, 13:16) *
2 char str[20] = {'\0'};
3 sprintf (str, "%d", value);

кстати, занулять строку не обязательно. sprintf сам добавляет '\0' после окончания записи строки. нужно только проверять возвращаемый результат - сколько символов он записал в строку (естественно, добавленный ноль в конце не включается в длину).

Автор: Sergey B. 28.10.2011, 11:20

ну если использовать std::string
http://www.cplusplus.com/reference/iostream/stringstream/

Автор: RRaptor 13.10.2012, 21:25

Как вариант:

int value = 1111111
ostringstream outs;
outs<<value;
gtk_entry_set_text ( GTK_ENTRY (entry), outs.str().data());

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)