Автор: 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());