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

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

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

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

сроковый масив

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

o4en1 krutoi

#include <iostream>
#include <windows.h>
using namespace std;
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char str[] = "Здравствуй, мир!"; // объявляем символьный массив
char *b; // объявляем указатель на символ
b = &str[12]; // теперь b указывает на 12-ый символ str //символ это пробел
*b = 'M'; // присваиваем первому элементу b символ 'М'
cout << b; // выводим строку b на экран (Мир!) //присвоили указателю b
символ 'M' а выходит слово мир почему не 'M' подскажите хто знает
}
 
O

Over

У тебя указателю присваивают адрес буквы "м". Вся строка остаётся в памяти. Только указатель запоминает позицию буквы "м". Это не значит, что обратившись к b, мы можем обратиться только к букве "м" и всё, мы можем обращаться к любому символу строки. Потом вместо м маленькой прописывается М большая. Просто обычное присвоение одного символа. Опять же, на целостность всей строки это никак не влияет, просто байтик подменился, а строка не развалилась, не раскидалась, не отвалился от строки конец после буквы м, и не отвалилось от строки начало до буквы м. Дальше, функция cout выполняет вывод на экран. Если ей скормить указатель на строку, то функция выводит последовательно все последующие символы строки, начиная с того, на который указывает b, пока не дойдёт до символа "\0" - ноль-терминатор или символ окончания строки. Вот поэтому у тебя и вывелось на экран всё, что было от буквы м и до конца строки, т.е. слово Мир.
 
O

o4en1 krutoi

#include <iostream>
#include <windows.h>
using namespace std;
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char str[100]; // объявление строки символов

// просим пользователя ввести строку символов
cout << "введите строку: ";
cin >> str; // считываем строку, введенную пользователем

int count = 0; /* объявление переменной-счетчика, в которой
будем хранить количество вхождений х в строку */

// в цикле сравниваем каждый символ строки с х-ом,
// в случае совпадения увеличиваем переменную-счетчик на 1.
int i = 0;
while(str != '\0')
{
if (str == 'x') //хочу сделать так штобы прога искала не x а считала символы на што х поменять штобы она считала символы
count++;
i++;
}

// выводим результат на экран
cout << "\n данные " << count;
}
 
G

gamecreator

ты хочешь подсчитать кол-во символов в массиве? strlen. а еще у тебя неоптимизированный код.
 
O

o4en1 krutoi

почему неоптимизированый код
мне надо научится такое задние учителя функцию надо написать самому
 
G

gamecreator

ну так убери if (str == 'x') и в count получишь кол-во элементов
 
Мы в соцсетях:

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