Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразование 
V
    Опции темы
afanp
Дата 30.3.2009, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



У меня есть метод класса, который должен преобразовывать числа в строку. Однако есть небольшая загвоздка : 
Код

nt mybuf=10;
    int k=0;
    string a;
    while(k<3){
    char*c=new char[mybuf];
    if(k==0){
        itoa(year,c,mybuf);
        a+="year ";
        a+=c;
        delete c;}
    else if(k==1){
        itoa(month,c,mybuf);
        a+=" month ";
        a+=c;
        delete c;}
    else if(k==2){
        itoa(day,c,mybuf);
        a+=" day ";
        a+=c;
        delete c;}
    k++;

если я например делаю размер буфера меньше и преобразовываю 4х значное число, он потом выводит совершенно не то число которое было задано в начале.
PM MAIL   Вверх
Anikmar
Дата 30.3.2009, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



А зачем так мудрено?
Можно так:
Код

  char Buff[80];
  string a;
  sprintf(Buff,"year %d month %d day %d",year,month,day);
  a = Buff;

PM MAIL ICQ   Вверх
zim22
Дата 30.3.2009, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(afanp @  30.3.2009,  06:31 Найти цитируемый пост)
если я например делаю размер буфера меньше... он потом выводит совершенно не то число

так не делай его меньше

Добавлено через 44 секунды
Цитата(Anikmar @  30.3.2009,  07:43 Найти цитируемый пост)
А зачем так мудрено?

чтобы врагов со следа сбить


--------------------
PM MAIL   Вверх
afanp
Дата 30.3.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Цитата(zim22 @  30.3.2009,  06:31 Найти цитируемый пост)

так не делай его меньше
 

спасибо, но хотелось бы если можно узнать, почему так происходит
Про sprintf спасибо, первый раз такую штуку вообще вижу smile 

Это сообщение отредактировал(а) afanp - 30.3.2009, 12:40
PM MAIL   Вверх
Anikmar
Дата 30.3.2009, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(afanp @  30.3.2009,  12:29 Найти цитируемый пост)
Про sprintf спасибо, первый раз такую штуку вообще вижу  

 smile Все когда-то в первый раз происходит.

Почитайте про функции ввода/вывода, форматирование строк, преобразования - ведь itoa вы где-то откопали?


Цитата(afanp @  30.3.2009,  12:29 Найти цитируемый пост)
спасибо, но хотелось бы если можно узнать, почему так происходит

Считайте символы - сколько занимает число + завершающий 0.



PM MAIL ICQ   Вверх
afanp
Дата 30.3.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Anikmar,  ну там получается 4 символа + 0 = 5. А буфер то если хотябы на 9 то уже все непрально работает 
PM MAIL   Вверх
mes
Дата 30.3.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(afanp @  30.3.2009,  05:31 Найти цитируемый пост)
      itoa(year,c,mybuf);

третим параметром функция принимает не размер буффера, а базу системы счисления
http://www.cplusplus.com/reference/clibrar...tdlib/itoa.html


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 30.3.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(mes @  30.3.2009,  12:55 Найти цитируемый пост)
третим параметром функция принимает не размер буффера, а базу системы счисления
http://www.cplusplus.com/reference/clibrar...tdlib/itoa.html 

 smile  smile 
PM MAIL ICQ   Вверх
afanp
Дата 30.3.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



это такой фейл что даже вин smile спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0906 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.