Форум программистов, компьютерный форум CyberForum.ru

_itoa,вопрос по char* - C++

Восстановить пароль Регистрация
 
Dimarik__
 Аватар для Dimarik__
21 / 21 / 1
Регистрация: 29.04.2010
Сообщений: 444
04.03.2011, 21:39     _itoa,вопрос по char* #1
В MSDN описана функция

char *_itoa(
int value,
char *str,
int radix
);

В примере

C++
1
2
3
4
5
6
7
8
char buffer[65];
   int r;
   for( r=10; r>=2; --r )
   {
     _itoa( -1, buffer, r ); // C4996
     // Note: _itoa is deprecated; consider using _itoa_s instead
     printf( "base %d: %s (%d chars)\n", r, buffer, strnlen(buffer, _countof(buffer)) );
   }
Если же я вместо char buffer[65] напишу char* buffer, у меня программа даст недопустимую ошибку (обрщение к непроинициализированному указателю) при выполнении, если так char* buffer = "": - То
обращение по несуществующей памяти.
Получается, что когда я пишу char* buff = " "; у меня компилятор выделяет участок памяти, равный числу символов в си-строке? Или как? Можно как-то сделать так, чтобы _itoa работала не с char[], а с char*?
P.S. хотя по сути указатель char * buff указывает на первый символ массива buff....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2011, 21:39     _itoa,вопрос по char*
Посмотрите здесь:

Вопрос об особенности char и конструкторах C++
_itoa() и двумерные массивы C++
Вопрос по Char C++
Вопрос про char C++
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) C++
error: incompatible types in assignment of 'const char [5]' to 'char [10]' C++
C++ Различное поведение функции которая копирует строки с char* t и char t[]
C++ Поворот массива на 90 градусов (cannot convert form char to char*)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
04.03.2011, 21:45     _itoa,вопрос по char* #2
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Можно как-то сделать так, чтобы _itoa работала не с char[], а с char*?
Нужно выделить память под массив символов с помощью функции malloc.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.03.2011, 03:02     _itoa,вопрос по char* #3
Цитата Сообщение от Dimarik__
Получается, что когда я пишу char* buff = " "; у меня компилятор выделяет участок памяти, равный числу символов в си-строке?
нет, компилятор создаёт переменную типа char *, потом в отдельном месте создаёт строку " "
(это равно символьному массиву { ' ', '\0' })
и потом адрес первого символа этой строки записывает в переменную (адрес пробела)
и памяти выделяется только необходимое количество для хранения этого адреса
(память, которую занимает строка, вообще не относится к переменной)
Yandex
Объявления
05.03.2011, 03:02     _itoa,вопрос по char*
Ответ Создать тему
Опции темы

Текущее время: 08:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru