• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 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, но это все неправильно. Но уже не знаю, как отбросить ненужные элементы при присваивании.
 
I

IrineK

Не забывай ставить "заглушку" на строку: '\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;
}


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

dreamer

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

Rififi

okwell5

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

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

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

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

dreamer

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

неправильно.
mas имеет тип "массив из 300 элементов типа char", s - "указатель на char"
 
D

dreamer

И то, и другое - указатель на один и тот же тип элементов. Или, может быть, Вы подразумеваете под типом данных что-то другое?
 
O

okwell5

Не забывай ставить "заглушку" на строку: '\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'.
Спасибо!
 
D

dreamer

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!