Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Разбить массив char на части - возможно? / 23 сообщений из 23, страница 1 из 1
17.02.2017, 05:21
    #39406252
Разбить массив char на части - возможно?
Господа, подскажите, пожалуйста, как можно разбить одномерные чаровский массив на составляющие через определенное кол-во символов (например, через 1024)?

Я начала делать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    char src[10000];      
    char temp[1024];

    for(int i = 0; i < strlen(src); i++)
    {

        for (int j = 0; i < 1024; j++)

        {
            temp[j] = src[i];
        }
        // что-то делаю с temp[j];
    }

И загвоздка... После первого цикла массив temp я передаю и его можно заполнять заново, а вот массив исходный надо продолжать, а он у меня будет считываться заново :(

Как это побороть?

Спасибо!
...
Рейтинг: 0 / 0
17.02.2017, 05:24
    #39406253
Разбить массив char на части - возможно?
А потом мне надо будет из кусочков склеить один чаровский массив. Те же проблемы возникают...

P.S. В строки переводить не могу, нельзя.
...
Рейтинг: 0 / 0
17.02.2017, 05:52
    #39406254
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретный
Код: plaintext
1.
// что-то делаю с temp[j];

В зависимости от того, что именно.
Если ты хочешь передавать куски в функции работы со строками, то тебе просто нужен массив с нулём на конце.
Т.е. алгоритм такой:
1. запоминаешь (i+1)*1024-й символ из src
2. на его место пишешь ноль
3. "что-то делаешь" с &src[i*1024]
4. возвращаешь (i+1)*1024-й символ на место

если это просто массив, то пункты 1,2,4 делать не надо, надо просто чтобы код "что-то делаю" знал про длину
...
Рейтинг: 0 / 0
17.02.2017, 05:53
    #39406255
Разбить массив char на части - возможно?
Блин, циул-то у меня вообще бредовый получился... Исходное кол-во элементов, естественно, может быть не кратно 1024 и надо будет учитывать оставшийся хвост.
Жесть...(
...
Рейтинг: 0 / 0
17.02.2017, 07:16
    #39406267
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
Есть ещё функция strncpy, которая копирует заданное число символов. Это чтобы вручную не копировать, если выбран именно путь копирования. Код будет выглядеть проще.
И после копирования этой функцией не забыть в конце скопированного массива нуль поставить (если планируется с массивом работать как со строкой)
...
Рейтинг: 0 / 0
17.02.2017, 09:20
    #39406308
Разбить массив char на части - возможно?
CEMb, дело в том, что у меня там в массиве изначальном нуль как раз-таки и сидит, но мне он нужен - т.е. я не работаю как со строкой.
...
Рейтинг: 0 / 0
17.02.2017, 09:23
    #39406311
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретный,

открой для себя memcpy
...
Рейтинг: 0 / 0
17.02.2017, 10:46
    #39406376
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретныйА потом мне надо будет из кусочков склеить один чаровский массив. Те же проблемы возникают...

P.S. В строки переводить не могу, нельзя.


как бы если бы такую элементарщину не можешь сделать, зачем было браться? а то у людей работы нет, а я тут на форуме отвечай всяким недоучкам, как с массивами работать...
...
Рейтинг: 0 / 0
17.02.2017, 13:03
    #39406515
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретныйА потом мне надо будет из кусочков склеить один чаровский массив. Те же проблемы возникают...

Избавься от обеих задач махом: "делай что-то" непосредственно с src.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2017, 17:34
    #39406817
Разбить массив char на части - возможно?
Dimitry Sibiryakov ,Dimitry SibiryakovИзбавься от обеих задач махом: "делай что-то" непосредственно с src. когда возникает ограничение на чтение/запись данных (через Ini-файл) в размере 1024, то source приходится делить.
...
Рейтинг: 0 / 0
17.02.2017, 17:54
    #39406838
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретныйкогда возникает ограничение на чтение/запись данных (через Ini-файл) в размере 1024, то
source приходится делить.

Избавься и от ini-файла, работай с ним как с обычным текстом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2017, 19:18
    #39406902
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретный Dimitry Sibiryakov ,Dimitry SibiryakovИзбавься от обеих задач махом: "делай что-то" непосредственно с src. когда возникает ограничение на чтение/запись данных (через Ini-файл) в размере 1024, то source приходится делить.
Для работы ини есть соответстующее WinAPI GetPrivateProfile...() / WritePrivateProfile ... ()

Но как БД ини лучше не использовать, лучше использовать БД. Тот же SQLite например. Ини он только для чтения должен быть.
...
Рейтинг: 0 / 0
17.02.2017, 23:20
    #39406970
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
Dimitry SibiryakovИзбавься и от ini-файла, работай с ним как с обычным текстом.
у человека с массивами проблемы, а ты ему предлагаешь с файлом работать
...
Рейтинг: 0 / 0
17.02.2017, 23:21
    #39406972
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
Dima TИни он только для чтения должен быть.вот ведь как, неожиданно
...
Рейтинг: 0 / 0
17.02.2017, 23:28
    #39406973
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
egorychу человека с массивами проблемы, а ты ему предлагаешь с файлом работать

В отличии от массивов, построчная работа с файлами описана в любом букваре.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.02.2017, 17:02
    #39407199
Разбить массив char на части - возможно?
Dima T ,Dima TНо как БД ини лучше не использовать, лучше использовать БД. Тот же SQLite например. Ини он только для чтения должен быть.Я понимаю, но не могу отходить от задания, в котором сказано в качестве БД использовать ini-файл, вот и мучаюсь (спасибо преподу).

Dima TДля работы ини есть соответстующее WinAPI GetPrivateProfile...() / WritePrivateProfile ... ()Думаете, эти функции снимают ограничения?
У меня данные в итоге должны записываться в HEX-виде (соответствующую WinAPI-шную функцию не обнаружил). У TIni для этого использую WriteBinaryStream() и ReadBinaryStream() . Write вроде как пишет любое количество, а вот ReadBinaryStream считывает почему-то только 1024 :( Я зашел в исходники Inifiles.pas, обнаружил, что ReadBinaryStream использует ReadString:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
function TIniFile.ReadString(const Section, Ident, Default: string): string;
var
  Buffer: array[0..2047] of Char;
begin
  SetString(Result, Buffer, GetPrivateProfileString(PChar(Section),
    PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FFileName)));
end;

Видно, что здесь задается Buffer . Только он тут почему-то 2047, а не 1024 (что я получаю на практике). Меняю это значение на 10000, например, и также считываются 1024 символа в итоге :( Правда, тут есть есть некая функция SetString, но я не понял откуда она пришла в Inifiles.pas...

В общем-то, конечно, хотелось бы решить проблему с 1024, но корректировка этого буфера ничего не дала... Странно это.
...
Рейтинг: 0 / 0
18.02.2017, 17:12
    #39407209
Разбить массив char на части - возможно?
А ну вон и GetPrivateProfileString (я не только тупой, я и ещё и слепой). Только ограничение в 1024 вообще непонятно в таком случае.
...
Рейтинг: 0 / 0
18.02.2017, 18:11
    #39407220
Разбить массив char на части - возможно?
Оказывается, надо просто задействовать класс TMemIniFile и проблема решена.

Но мне удивительно следующее: если я меняю исходник в pas-файле, то C++ Builder просто это дело проигнорирует?
...
Рейтинг: 0 / 0
18.02.2017, 18:19
    #39407226
Разбить массив char на части - возможно?
Ну да, очередную глупость спорол :) На билдере ясен-красен не отразится, а вот на дельфике почему-то тоже не отразилось, хотя там должно.

Ладно, это вне темы. Всех благодарю за помощь!
...
Рейтинг: 0 / 0
18.02.2017, 23:54
    #39407332
д0кХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретныйCEMb, дело в том, что у меня там в массиве изначальном нуль как раз-таки и сидит, но мне он нужен - т.е. я не работаю как со строкой.

не правда

for(int i = 0; i < strlen(src); i++)


Для деления большого массива на части ничего не нужно
копировать, а завести массив указателей
и заполнить его смещениями в большом массиве.
...
Рейтинг: 0 / 0
19.02.2017, 10:01
    #39407387
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
д0кХНубикКонкретныйCEMb, дело в том, что у меня там в массиве изначальном нуль как раз-таки и сидит, но мне он нужен - т.е. я не работаю как со строкой.

не правда

for(int i = 0; i < strlen(src); i++)


Для деления большого массива на части ничего не нужно
копировать, а завести массив указателей
и заполнить его смещениями в большом массиве.

даже этого не нужно, можно в цикле вычислять значение ужастиков на очередной кусок и обрабатывать.
...
Рейтинг: 0 / 0
19.02.2017, 14:14
    #39407425
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретныйКак это побороть?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    char src[10000];      
    char temp[1024];
    int j = 0;
    for(int i = 0; i < strlen(src); i++)
    {
        temp[j] = src[i];
        j++;
        if(j == 1023) {
            temp[j] = 0;
            j = 0;
            // что-то делаю с temp;
        }
    }
    if(j > 0) {
            temp[j] = 0;
            j = 0;
            // что-то делаю с temp;
    }
...
Рейтинг: 0 / 0
20.02.2017, 21:35
    #39408143
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить массив char на части - возможно?
НубикКонкретный, трудно понять, что вы хотите и что именно не получается))) Напишите обертку, которая будет принимать адрес массива и его длину, и работайте с ним как вам угодно в рамках дозволенного и даже немного больше ;)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Разбить массив char на части - возможно? / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]