Nikolai
У меня сейчас другая проблема - я пытаюсб реализовать GoTosymbol в виме как это сделано в саблайме - пока неудачно( А все что реализовали плагинами до тошноты неюзабельно и с багами
Deleted Account
Nikolai
Без внешних утилит
Deleted Account
😂 у нас тут обсуждение IDE которое запрещено
Deleted Account
Deleted Account
а чего на вим пересел?
Nikolai
недостаток вима?
недостаток удобства) Пока просто никто не сделал, как мне надо)
Nikolai
а чего на вим пересел?
слепую печать освоил) Да и на машинке очень слабой приходится в рантайме отлаживать. Там саблайм не поставишь
Nikolai
IDE вещь классная, в том плане что хороший коплит, интенд и т.д. для языка дает и очень сильно облегчает жизнь разрабу из коробки, но есть ситуации когда ты очень ограничен в ресурсах и тогда приходиться изобретать велосипед
Deleted Account
Anonymous
Bohdan
Хорошего вечера. Нужен совет,
Как правильно написать функцию nameOfLib, чтобы файл создавался правильно.
Работает, если вместо функции писать:
int endOfName = 0;
printf("What name of library : ");
while((temp[endOfName] = getchar()) != '\n')
endOfName++;
ask = endOfName;
Первый скриншот - работает правильно.
Второй скриншот - сами видите.
https://pastebin.com/VNs5Ytfs
Bohdan
Александр
после цикла
temp[endOfName] = '\0';
Александр
а вообще, с этим в #supapro
Александр
#supapro
Bohdan
Александр
SIZE_OF_LIB_NAME = ?
Bohdan
Нет.
Bohdan
Вся функция, как и ее замена - костыль. Замена работает, функция нет.
Bohdan
То что вы предлагаете работать не будет =)
Александр
char name[ask]; так нельзя в C++
Bohdan
константа, 60.
Ограничение размера имени
Bohdan
Суть в том, чтобы ненужная часть имени отбрасывалась
Александр
Bohdan
Александр
и return endOfName + 1;
Александр
ну или здесь strncpy(name, temp, ask+1);
Bohdan
Тоже было)
Александр
должно быть всё вместе. функция в текущем варианте возвращает кол-во считанных букв, не прописывает завершающий ноль и копирует строку без него же
Bohdan
Ладно. Есть ли возможность правильно возращать строку имени, если не знаешь сколько ему(имени) нужно будет памяти?
Александр
да, пользоваться динамическим выделением и realloc'ом при надобности
Александр
задание на си или с++?
Bohdan
На си. Пишу для себя, ни задание, ни робота)
Bohdan
Спасибо, попробую и отпишусь
Bohdan
Работает, но не так как хотелось бы. Спасибо вам, буду все по-новой писать)
ovf
если это имя файла, особенно без пути, то у него есть вполне физические ограничения на длину, не надо для него ничего динамически выделять. см, скажем, PATH_MAX в limits.h
Bohdan
мне надо передать строку в fopen =)
Bohdan
а под строку и нужна память
ovf
(и да, на большинстве систем путь может быть длиннее PATH_MAX, но у пользователя с такими путями проблемы возникнут задолго до того, как он воспользуется твоим кодом)
ovf
ну так всё правильно, только вместо SIZE_OF_LIB_NAME используй PATH_MAX. ну а про как читать строчку тебе выше уже вроде рассказали.
ovf
кстати, обычно оказывается, что вводить данные в программы (особенно пути к файлам) удобнее не в режиме диалога, а заранее, поэтому эту строчку лучше прочитать из аргументов командной строки (argv)
Bohdan
Но ведь PATH_MAX будет занимать намного больше памяти, чем нужно названию библиотеки?
Bohdan
ovf
пользователь может сразу придумать имя
Александр
PATH_MAX - это не такая огромная константа, чтобы переживать за память. На стеке уж точно поместится
ovf
будет занимать больше памяти (скажем, 1KB), но служебная информация аллокатора памяти, который тебе выделит твои 60 байт, займёт больше
Bohdan
А где можно об этом подробнее узначть/прочитать?
ovf
об этом -- это о чём? как экономить память? http://www.smallmemory.com/book.html
Bohdan
ovf
но к современным персональным компьютерам это всё не очень относится. твоей программе ос выделила уже несколько мегабайт только на стек, поэтому можно оттуда спокойно брать свои несчастные килобайты
Bohdan
я параноик)
ovf
ну про аллокатор -- прочитать любую книжку про аллокаторы
ovf
или лучше университетский курс
Nikita
Всем счастливо! Было приятно вас читать.
Bohdan
ovf
в частности даже только что упоминавшаяся книга годится: http://www.smallmemory.com/6_AllocationChapter.pdf
Vladislav
ovf
но вообще сначала рекомендую научиться писать корректный код. :-)
Bohdan
ovf
ну конкретно про представленный код обсудили ораторы выше. а вообще это было пожелание на будущее.
Bohdan
Спасибо)
Vladislav
надо обращать внимание на валидацию входящих данных и обработку ошибок
Bohdan
Спасибо за помощь и спокойной ночи)
ovf
очень благородная цель. удачи.
Konstantin
Всем привет)
Bohdan
кстати, если использовать PATH_MAX вместо SIZE_OF_LIB_NAME, программа работает неправильно, если не очистить буфер через inputErrorsSolutuion(PATH_MAX)
Bohdan
а PATH_MAX занимает 4096 ячеек памяти.
ovf
PATH_MAX это константа типа int. а массив типа char длины PATH_MAX занимает PATH_MAX (4096 в твоей системе) байт
Bohdan
4 кб против 0.6 кб =)ї
Konstantin
Дан, а обязательно на сях фигачить?
Александр
если выделять место на стеке - то N кб против N кб
Bohdan
Ну, я купил книгу по Си. В университете может и си++ научат.