[C++] Строки и массивы. Символ окончания строки

Alex1983

Разработчик
Сообщения
916
Реакции
444
Баллы
488
Всем привет. Начал изучать С++.
Вопрос такой. Как понять символ завершающий строку равен нулю(=0)?
В массивах.
Заранее благодарен.
 

iskander-k

Ассоциация VN/VIP
VIP
Сообщения
3,732
Реакции
2,429
Баллы
593
Как понять символ завершающий строку равен нулю(=0)?
'\0'-символ завершающий строковой массив. Благодаря нему можно определить где кончается массив
Код:
char c[]={"Массив сиволов\n Какой-то текст."};
for(i=0;c[i]!='\0';i++);//определяет сколько символов в массиве.
если не ошибаюсь
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
если не ошибаюсь
он их только переберет по одному до конца, а записать и вывести результат?)

Добавлено через 1 минуту 57 секунд
точнее Саня скажет но кажется там ошибочка
хоть на С++ ничего не делаю но изучал PHP а это упрощенный С цикл по другому задается
хотя здесь возможно и ошибаюсь
 

iskander-k

Ассоциация VN/VIP
VIP
Сообщения
3,732
Реакции
2,429
Баллы
593
Последнее редактирование:

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
это отрицание - не равно
ну да, только имел ввиду зачем оно там? просто не нужно..задаешь начало
и далее цикл
хотя в С как мне говорили больше условностей..может и нужно..
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
тогда выйдет за пределы цикла.
как?)) перебор идет в массиве..закончится массив закончится цикл ведь смотри, у тебя же не до нуля считается...так что... а вот если массив от -10 до +10..на нуле и выйдет из цикла?
 

AlexTNT

Активный пользователь
Сообщения
79
Реакции
30
Баллы
408
Любая символьная константа, например "ОЙ У ПОЛИ КРИНИЧКА", представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом "\0", так что любая программа может по нему легко обнаружить конец строки. Поэтому строка занимает в памяти на один символ больше, чем записано между двойными кавычками. Нумерация элементов массива начинается с нуля. Надо помнить, что, например 'T' - это символ(буква), а ' T ' - это строка, состоящая из двух символов: 'T' и '\0'. Отсюда следует, что пустых строк не бывает.
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Реакции
5,590
Баллы
808
Код:
char c[] = { "Массив" };
for(i = 0; c[i] != '\0'; i++); //определяет сколько символов в массиве.
Вот такую конструкцию компилятор распознает как шесть символов + один завершающий символ '\0' итого массив будет из семи символов. Если же задавать размер массива явно
Код:
 const int size = 10;  // размер символьного массива ввода
 char array[size]; // Массив с размером в 10 символов
То нужно учитывать что сюда вместится 9 символов + завершающий символ.

Это не ошибка, а условие не равно. Конструкция цикла, которую привёл iskander-k будет выводить символы по одному пока не встретится символ означающий конец строки.
пока: проверяемый символ не равен завершаемому символу - производить вывод элементов массива "c"
Код:
  for(i = 0; c[i] != '\0'; i++);
     cout<<c[i];
ну да, только имел ввиду зачем оно там? просто не нужно..задаешь начало
Это один и вариантов вывода, полезно когда нужно проверить какой-либо отдельный символ, такая конструкция обеспечивает доступ ко всем символам строки. Вывести можно и прямо

Код:
#include <iostream>
using namespace std;

int main()
{
  int z;
  char c[] = "MyString"; // Выводимая строка

  cout << "Out String = " << c << endl; // вывод как имеет ввиду Arbitr

  for(int i = 0; c[i] != '\0'; i++)
     cout << c[i]; // вывод iskander-k
  cin >> z;
  return 0;
}
//---------------------------------------------------------------------------
перебор идет в массиве..закончится массив закончится цикл ведь смотри, у тебя же не до нуля считается...так что... а вот если массив от -10 до +10..на нуле и выйдет из цикла?
А вот так.
Код:
char c[] = "MyString"; // Выводимая строка
Это всё равно что
Код:
char c[] = { 'M', 'y', 'S', 't', 'r', 'i', 'n', 'g', '\0' };
Последний нуль. Элементы массив начинается с нуля

Код:
c[0] не равно '\0' - цикл продолжается
c[1] не равно '\0' - цикл продолжается
c[2] не равно '\0' - цикл продолжается
c[3] не равно '\0' - цикл продолжается
c[4] не равно '\0' - цикл продолжается
c[5] не равно '\0' - цикл продолжается
c[6] не равно '\0' - цикл продолжается
c[7] не равно '\0' - цикл продолжается
c[8] не равно '\0' - цикл продолжается
c[9] равно '\0' - цикл прерывается

Как понять символ завершающий строку равен нулю(=0)?
Воспринимай его как некую метку, необходимую компилятору\программисту для определения конца строки.
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,615
Реакции
1,656
Баллы
593
будет выводить символы по одному пока не встретится символ означающий конец строки.
уже понял, не знал что завершается строка 0 просто

Добавлено через 1 минуту 11 секунд
Воспринимай его как некую метку, необходимую компилятору\программисту для определения конца строки.
у нас счетчик по другому шел..не до нуля..
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Реакции
5,590
Баллы
808
Arbitr, А это только в символьных типах char, есть ещё тип string, там проще, а ещё класс AnsiString, там вообще без проблем всё.
 
Сверху Снизу