Помогите пожалуйста, нужно сделать следующее: удалить символы, стоящие перед символом *. Рассмотреть случай наличия в последовательности нескольких символов *
Удалить нельзя. Можно только остаток строки после звездочки скопировать/перенести на место звездочки.
Т.к. память будет перекрываться, то нужно использовать функцию memmove, memcpy в этом плане не безопасна.
а без функций можно это сделать как-то? Там будет всего одна строка в которой это нужно удалить, можете показать код, как это делается, заранее спасибо)
Пример реализует удаление звездочек :-) немного не то, но его не трудно переделать под ваш случай.
Кстати, вы не написали, что же делать с несколькими звездочками подряд и что делать, если в строке в разных местах раскиданы звездочки?
Вот удаление символов перед звездочкой: https://ideone.com/JTpBYx
Для перемещения строки использовал функцию. Переделать на вариант без функции не сложно, оставлю это вам в нагрузку, к тому же по обоим примерам должно быть понятно как работать с Си-строками.
res2001, Огромное спасибо, только вот не очень понял как именно это работает,
char * asterisk = str + len - 1
отсюда мы получаем последний элемент строки, но каким образом?
Что нам даёт сложение строки с количеством символов в ней?
ilya77731, Не сложение строки, а сложение указателя на первый символ строки с количеством символов - 1 дает указатель на последний символ строки.
В Си строк как таковых нет. Под строкой в Си имеют ввиду массив байт, последний байт в котором равен 0.
Объявление:
char * str = "123";
практически равносильно объявлению:
char str[4] = {'1', '2', '3', 0};
Разница в этих объявлениях в том где фактически в памяти размещается строка.
В первом случае срока "123" автоматически размещается в секции констант загрузчиком ОС при загрузке программы в память, указатель str располагается в стеке, ему присваивается адрес строки "123". Если открыть на просмотр исполняемый файл можно найти среди двоичных кодов строку "123".
Во втором случае и строка и указатель размещаются в стеке. Указателю присваивается адрес строки из стека. В исполняемом файле, скорее всего, не будет строки "123", хотя это зависит от компилятора.