|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Работа со строками. Буфер содержит нуль-терминатор |
|
|
C/C++ - [решено] Работа со строками. Буфер содержит нуль-терминатор
|
|
Старожил Сообщения: 224 |
Есть буфер (char[512]), в котором текст разделённый \0. Нужно разбить на строки буффер и записать в массив. Как это правилнее в C++ сделать?! Пока придумал вариант в цикле посимвольно просматривать буфер и писать символы в массив при встрече с '\0' создавать новый элемент в массиве. Но чот мне кажется что решение из арсенала индийских прогеров.... Есть еще strchr... Но она возвращает указатель на элемент... а без индекса не знаю как извлечь из строки подстроку... В общем помогите плз найти оптимальное решение...
|
|
|
------- Отправлено: 16:07, 28-08-2010 |
|
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Первое, что пришло в голову:
char buf[] = "aaaa\0bbbb\0cccc\0";
char result[1024];
char *ptr;
int offset, len;
offset = 0;
len = sizeof(buf);
while(len != offset)
{
ptr = strchr(buf + offset, 0);
strncpy(result, buf + offset, (int)(ptr - buf) + 1);
offset += (int)(ptr - (buf + offset)) + 1;
cout << result << endl;
}
getch();
return 0;
|
|
------- Отправлено: 18:03, 28-08-2010 | #2 |
|
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Dr.Dark, если наперёд известно количество подстрок (в примере ниже 23) то можно поступить следующим образом:
Воспользовавшись предложением от ganselo, в части sizeof, можно обойтись от указания конкретного числа в цикле, однако на момент компиляции строка уже должна быть сформирована (прописана в коде). |
|
Отправлено: 02:18, 29-08-2010 | #3 |
|
Старожил Сообщения: 224
|
Профиль | Отправить PM | Цитировать ММММ Всем спасибо.... уже сделал так
char *sArr, INI[512], *ptr, *lptr;
//запись в буфер INI[512]
lptr=INI;
while(*lptr!=*(lptr-1))
{
ptr=strchr(lptr,'\0');
sArr=(char*) malloc(ptr-lptr+1);
strncpy(sArr, lptr, ptr-lptr+1);
lptr=ptr+1;
cout <<"sArr :" << sArr <<"\n\r";
cout <<"sArr :" << ptr-INI <<"\n\r";
system("pause");
}
и увидишь что лишние нули будут в result... Admiral Увы количество подстрок не известно... Относительно функциональности правильно. А вот относительно идеологии C++? Подскажите всё ли правильно?! И ещё подкиньте что нибудь толковое о динамических многомерных массивах в C++... Гугл уже юзаю.... |
|
------- Последний раз редактировалось Dr.Dark, 29-08-2010 в 03:58. Отправлено: 03:43, 29-08-2010 | #4 |
|
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Dr.Dark:
|
||
|
------- Отправлено: 10:53, 29-08-2010 | #5 |
|
Старожил Сообщения: 224
|
Профиль | Отправить PM | Цитировать |
|
------- Отправлено: 16:13, 29-08-2010 | #6 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| C/C++ - [решено] Работа с строками | crashtuak | Программирование и базы данных | 16 | 26-03-2009 01:21 | |
| CMD/BAT - [решено] Работа со строками в cmd-файлах | melato | Скриптовые языки администрирования Windows | 3 | 30-01-2007 08:52 | |
| Нуль модем | Roman Go | Хочу все знать | 4 | 30-11-2002 01:19 | |
|