powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Разбить массив char на части - возможно?
23 сообщений из 23, страница 1 из 1
Разбить массив char на части - возможно?
    #39406252
Господа, подскажите, пожалуйста, как можно разбить одномерные чаровский массив на составляющие через определенное кол-во символов (например, через 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
Разбить массив char на части - возможно?
    #39406253
А потом мне надо будет из кусочков склеить один чаровский массив. Те же проблемы возникают...

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

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

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

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

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


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

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

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

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

В отличии от массивов, построчная работа с файлами описана в любом букваре.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Разбить массив char на части - возможно?
    #39407199
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
Разбить массив char на части - возможно?
    #39407209
А ну вон и GetPrivateProfileString (я не только тупой, я и ещё и слепой). Только ограничение в 1024 вообще непонятно в таком случае.
...
Рейтинг: 0 / 0
Разбить массив char на части - возможно?
    #39407220
Оказывается, надо просто задействовать класс TMemIniFile и проблема решена.

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

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

не правда

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


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

не правда

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


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

даже этого не нужно, можно в цикле вычислять значение ужастиков на очередной кусок и обрабатывать.
...
Рейтинг: 0 / 0
Разбить массив char на части - возможно?
    #39407425
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НубикКонкретныйКак это побороть?
Код: 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
Разбить массив char на части - возможно?
    #39408143
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НубикКонкретный, трудно понять, что вы хотите и что именно не получается))) Напишите обертку, которая будет принимать адрес массива и его длину, и работайте с ним как вам угодно в рамках дозволенного и даже немного больше ;)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Разбить массив char на части - возможно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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