• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Как из массива значения перенести в строку

  • Автор темы Автор темы okwell5
  • Дата начала Дата начала
O

okwell5

Объявил char *s;
Объявил char mas[300];
Далее я заполняю только певые 10 членов массива путем
C++:
for(i=0;i<10;++i)
{
mas[i]='F';
}

Теперь сама суть вопроса: мне нужно чтобы только заполненные элементы вошли в строку s
s=mas; //здесь строке присваивается весь массив, но мне нужны только заполненные элементы

Пробовал и s=*mas, и *s=mas, и *s=*mas, но это все неправильно. Но уже не знаю, как отбросить ненужные элементы при присваивании.
 
Не забывай ставить "заглушку" на строку: '\0'


#include <iostream>
using namespace std;

void main()
{
int i;
char *s;
char mas[300];
for(i=0;i<10;++i)
mas='F';
mas='\0';
s=mas;
cout<<s<<endl;
}


Это работает правильно.
 
okwell5, у Вас терминология некорректная. И mas, и s будут иметь одинаковый тип данных, разве что mas сразу будет указывать на свободную область памяти размером 300 байт. И mas можно использовать для обычных операций с текстовой строкой. Только, как было замечено выше, нужно поставить завершающий "ноль" в конце.
 
okwell5

s=mas; //здесь строке присваивается весь массив, но мне нужны только заполненные элементы

никакой массив здесь не присваивается.
указатель s получает значение равное адресу первого элемента массива.

Но уже не знаю, как отбросить ненужные элементы при присваивании.

отбрасывают копыта ((( а элементы массива - копируют.
нужно выделить память под необходимое число символов и скопировать их (strcpy, strncpy)

dreamer

И mas, и s будут иметь одинаковый тип данных

неправильно.
mas имеет тип "массив из 300 элементов типа char", s - "указатель на char"
 
И то, и другое - указатель на один и тот же тип элементов. Или, может быть, Вы подразумеваете под типом данных что-то другое?
 
Не забывай ставить "заглушку" на строку: '\0'


#include <iostream>
using namespace std;

void main()
{
int i;
char *s;
char mas[300];
for(i=0;i<10;++i)
mas='F';
mas='\0';
s=mas;
cout<<s<<endl;
}


Это работает правильно.


Да, верно, проверил. Только в цикле должно быть mas[i+1]='\0'.
Спасибо!
 
Только в цикле должно быть mas[i+1]='\0'.
Во-первых, не в цикле, а после цикла, а во-вторых, не должно, т.к. после цикла i будет равен индексу пустого элемента.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab