Форум программистов, компьютерный форум CyberForum.ru

Длина строки до ввода ? - C++

Восстановить пароль Регистрация
 
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 334
21.01.2014, 19:53     Длина строки до ввода ? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>//обеспечение доступа к классу string
#include <cstring>
using namespace std;
int main(){
char charr[20];
string str;
cout<<"длина строки в charr до ввода="<<strlen(charr)<<endl;
 
cout<<"длина строки в  str до ввода="<<str.size()<<endl;
 
cin.getline(charr,60);//ввод строки текста
                      //указание максимальной длины.
cout<<charr<<endl;
getline(cin,str);//ввод другой строки текста
//теперь cin -аргумент: спецификатор длины отсутствует.
cout<<str<<endl;
cout<<"длина строки в charr после ввода"<<endl;
cout<<strlen(charr)<<endl;//длина строки в charr после ввода
cout<<"длина строки в str после ввода"<<endl;
cout<<str.size()<<endl;//длина строки в str после ввода.
    return 0;
}
почему длина строки до ввода текста выводится как 7 , а я задавал размер 20 ?

Добавлено через 10 минут
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 19:53     Длина строки до ввода ?
Посмотрите здесь:

C++ Длина строки в С++
C++ Длина строки в С++
Длина строки в векторе C++
C++ Длина строки
C++ длина строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ruTwit
6 / 6 / 1
Регистрация: 04.10.2013
Сообщений: 92
21.01.2014, 20:00     Длина строки до ввода ? #2
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>//обеспечение доступа к классу string
using namespace std;
int main(){
    string stroka;
    int n;
    n=stroka.length(); //длина строки
    return 0;
}

Добавлено через 33 секунды
Цитата Сообщение от sergei60 Посмотреть сообщение
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
потому, что считает до пробела
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.01.2014, 20:01     Длина строки до ввода ? #3
Цитата Сообщение от sergei60 Посмотреть сообщение
почему длина строки до ввода текста выводится как 7 , а я задавал размер 20 ?
20 - это не размер твоей строки, это даже не объявление строки, а просто размер буфера выделенный на стеке. Будет это строка, или набор символов, или любые рандомные данные - программе пофиг.
С-строка оканчивается нулевым символом. На стеке может быть какой угодно мусор. Поэтому длина твоей "строки" может быть любой. Потому что это не строка, а мусор из байтов на стеке. Где там попадется \0, кто его знает.
Цитата Сообщение от sergei60 Посмотреть сообщение
Функция strlen() работает, просматривая массив до того момента, пока не встретит нулевой символ и останавливается почему так?
Потому что строка должна оканчиваться нулевым символом.

Добавлено через 34 секунды
Цитата Сообщение от ruTwit Посмотреть сообщение
потому, что считает до пробела
Нет, не до пробела.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 20:39     Длина строки до ввода ? #4
Цитата Сообщение от sergei60 Посмотреть сообщение
cin.getline(charr,60);//ввод строки текста
* * * * * * * * * * * //указание максимальной длины.
Для getline() второй параметр не должен быть больше размера буфера (иначе, выход за границу массива).
C++
1
2
3
char charr[20];
...
cin.getline(charr, 20);
Функция считает не больше чем 20 - 1 символов, поместив в конце '\0'.
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 334
21.01.2014, 20:50  [ТС]     Длина строки до ввода ? #5
alsav22 , ценное замечание ,как мои мысли подсмотрел,а я сижу гадаю над сообщением компилятора. *** stack smashing detected ***: ./m terminated
Segmentation fault Оказывается тут собака зарыта.! Но ведь объект strig автоматически изменяет свой размер чтобы вместить строку. я же здесь string str; не определяю размер.В этом я думал преимущество класса string .что он сам увеличивает размер как угодно..
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 21:17     Длина строки до ввода ? #6
Цитата Сообщение от sergei60 Посмотреть сообщение
Но ведь объект strig автоматически изменяет свой размер чтобы вместить строку. я же здесь string str; не определяю размер.В этом я думал преимущество класса string .что он сам увеличивает размер как угодно..
Я же не про string пшу. В string читает другая функция: std::getline(). Там всё нормально. А в массив char читает метод getline(), класса istream (вызывается через объект cin):
C++
1
cin.getline(charr, 20);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 21:24     Длина строки до ввода ?
Еще ссылки по теме:

строки в с++ проверить является четным числом длина введенной пользователем строки и вывести сообщение на экран C++
C++ длина строки
появилась загвоздка с функцией. нужно вывести на экран строку, сост. из звездочек. Длина строки-параметр функциииз звезд. длина строки - C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 334
21.01.2014, 21:24  [ТС]     Длина строки до ввода ? #7
alsav22, спасибо ,полностью разобрался.
Yandex
Объявления
21.01.2014, 21:24     Длина строки до ввода ?
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru