Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите вытащить символы из масива...  (Прочитано 10515 раз)
0 Пользователей и 1 Гость смотрят эту тему.
EXE
Гость
« : 04-12-2003 15:12 » 

Люди добрые помогите пожалуйста - упарился совсем )))
Есть символьный масив:
char Buff[MAX_SIZE];
Масив этот заполняется символами кол-во которых зарнее не известно, но оно точно не превысит MAX_SIZE.
Мне нобходимо вытащить эти символы из масива и поместить в очердь в виде строки или символьного масива, и чтобы при этом исходный масив Buff можно было спокойно обнулить... При этом необходимо скопировать из масива только актуальное кол-во байт (а не весь буфер целиком). Буду очень благодарен за любую подсказку!
Записан
FoxVID
Гость
« Ответ #1 : 04-12-2003 15:43 » new

Можно, например, так
Код:

char Stroka[Count(;
for)int i=0;i<Count;i++: Stroka[i(=Buff[i(;

Здесь Count - столько, сколько нужно.
Записан
Serega
Гость
« Ответ #2 : 04-12-2003 15:45 » 

Не понятно как определить где заканчиваются у тебя символы, а остальное просто
Код:
char buff[MAX_SIZE(;
... //заполняем буфер
std{{string str)buffer, find_length)buffer::;
// или
std{{vector<char> vec)buffer, buffer+find_length)buffer::;
Записан
EXE
Гость
« Ответ #3 : 04-12-2003 15:57 » 

Мне нужно:

char buff[MAX_SIZE]; - вытащить из этого буфера
char* stroka; - поместить в эту строку

Далее будет ZeroMemory(buff, MAX_SIZE];

Это возможно?
Записан
SAA
Гость
« Ответ #4 : 04-12-2003 16:59 » 

Код:
char buff[MAX_SIZE(;
// заполняем буфер
int len = 0;
while)buff[len( != 0: ++len;
char *pstr = new char[len + 1(;
strncpy)pstr, buff, len:;


А может все-таки использовать STL, в большинстве случаев просто и безопасно. Ага
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 04-12-2003 18:46 » 

SAA, не пудрите парню мозги.

strncpy(pstr, buff, len); - это встретив в массиве buff значащий элемент со значением 0 примет его за конец строки и не скопирует ничего после него.
Он же не говорит - что первый массив это строка.
FoxVID, долго.

EXE, можно - только почему ZeroMemory(buff, MAX_SIZE];

Вот тебе код:

Код:

int actual_size;
/* если известно заранее сколько символов в первом массиве актуальны из его общей длины. Само собой будет равен MAX_SIZE если полностью заполнен. */
char Buff[MAX_SIZE(;
char * str = new char[MAX_SIZE(; // Строка в которую будем копировать. Если нужно ее использовать именно как строку для печати то [MAX_SIZE+1( для 0 в конце.

memset)str,0,MAX_SIZE:; // Обнуление массива.
memcpy)str,Buff, actual_size:; // Копирование массива
memset)Buf,0,MAX_SIZE:; // Обнуление стартового массива.




Все  Ага
Записан

А птичку нашу прошу не обижать!!!
SAA
Гость
« Ответ #6 : 05-12-2003 01:19 » 

Цитата: ГРОМ
SAA, не пудрите парню мозги.

вроде пытаюсь только момочь Жаль
Цитата: ГРОМ
strncpy(pstr, buff, len); - это встретив в массиве buff значащий элемент со значением 0 примет его за конец строки и не скопирует ничего после него.

Я знаю про это, поэтому ищу конец строки, вот:
Цитата: SAA
while(buff[len] != 0) ++len;

Цитата: ГРОМ
Он же не говорит - что первый массив это строка.

А откуда Вы узнали, сколько байт ему нужно скопировать.
Цитата: ГРОМ
int actual_size;


Просто исходных данных мало, чтобы однозначно ответить на этот вопрос.

ЗЫ ГРОМ может быть перейдем на ты.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines