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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
#1

Недопонял... Помогите пожалуйста... Со строками... - C++

31.10.2011, 16:28. Просмотров 604. Ответов 12
Метки нет (Все метки)

Доброго всем времени суток. Что объявляет следующая строка?

C++
1
char *s;
Создаётся указатель на начало строки, например как на простой вектор, или же создаётся строка? Или и то и другое? Если создаётся указатель, он содержит в себе мусор, то есть может указывать на что-угодно -> изменяя строку, мы можем изменить любые данные. Я так думаю потому-что это происходит с указателями на, скажем, int. Да и потом, нельзя ли создать строку следующим образом и не парится:

C++
1
char s[100];
Ну или проще говоря:
C++
1
2
char *string;
*string = "smth"
равняется ли:

C++
1
char string[10] = "smth";
В чём различия этих двух записей? Помогите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 16:28     Недопонял... Помогите пожалуйста... Со строками...
Посмотрите здесь:

Помогите пожалуйста со строками в C - C++
Необходимо решить задачку: Дана строка, содержащая последовательность слов, разделенных пробелами. Удалить из строки все слова, в которых...

Помогите пожалуйста!работа со строками, файлами - C++
Разработайте программу, функция main() которой содержит вызов предложенной стандартной функции обработки строк и вызов пользовательской...

помогите со строками на С - C++
Даны строки A и B. Если строки состоят из одних и тех же символов и в A нет повторяющихся символов, то упорядочить символы A в алфавитном...

Ребяты помогите со строками чуток разобраться. - C++
Есть строка. В ней надо найти максимальное количество повторяющихся элементов. int main(){ char s = "pen stolb nos avtobus stil...

Помогите пожалуйста. - C++
Здравствуйте. Помогите плс. Как на языке С++ сделать чтобы программа автоматически загружалась в авторан??? Можете кинуть исходник...

Помогите, пожалуйста! - C++
1.Из входной последовательности целых чисел построить бинарное дерево поиска. Найти в дереве и распечатать путь минимальной длины (= найти...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
31.10.2011, 16:36     Недопонял... Помогите пожалуйста... Со строками... #2
Цитата Сообщение от dimcoder Посмотреть сообщение
оброго всем времени суток. Что объявляет следующая строка?
char *s;
Указатель на символьный тип

Цитата Сообщение от dimcoder Посмотреть сообщение
char *string; *string = "smth"
Строковый литерал

Цитата Сообщение от dimcoder Посмотреть сообщение
char string[10] = "smth";
Массив символов.

Для каждой задачи нужно выбирать конкретное решение
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
31.10.2011, 16:41  [ТС]     Недопонял... Помогите пожалуйста... Со строками... #3
Цитата Сообщение от Dekio Посмотреть сообщение
char *string; *string = "smth"

Строковый литерал
А не сотрёт ли эта запись какие нибудь важные данные? Не укажет ли он на какую нибудь занятую область памяти?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
31.10.2011, 16:41     Недопонял... Помогите пожалуйста... Со строками... #4
Цитата Сообщение от dimcoder Посмотреть сообщение
В чём различия этих двух записей? Помогите пожалуйста...
Первое константа, второе можно изменять.
Есть еще третий вариант
C
1
char * str = (char *) malloc( sizeof(char) * 10 );
Это если вы на С пишите.
На с++ все вышеперечисленные варианты в общем случае желательно не использовать.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
31.10.2011, 16:42     Недопонял... Помогите пожалуйста... Со строками... #5
dimcoder, все зависит от того, как его использовать. В руках "одаренного человека" и обычный статический массив может стать смертельным оружием
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
31.10.2011, 16:46     Недопонял... Помогите пожалуйста... Со строками... #6
Цитата Сообщение от dimcoder Посмотреть сообщение
char *string;
*string = "smth";
ты где такое увидел? Во-первых, разыменование string даст тебе символ (char), которому ты пытаешься присвоить строку. Во-вторых, ты хочешь присвоить строке литерал (константу), так почему бы не объявить string с квалификатором const?
C
1
2
const char* string;
string = "smth";
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
31.10.2011, 17:00  [ТС]     Недопонял... Помогите пожалуйста... Со строками... #7
Повторю вопрос:
Цитата Сообщение от dimcoder Посмотреть сообщение
А не сотрёт ли эта запись какие нибудь важные данные? Не укажет ли он на какую нибудь занятую область памяти?
C++
1
2
const char* string;
string = "smth";
Тогда уж, наверное:

C++
1
const char *string = "smth";
?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
31.10.2011, 17:09     Недопонял... Помогите пожалуйста... Со строками... #8
Цитата Сообщение от dimcoder Посмотреть сообщение
Повторю вопрос:
нет, но попытка записи по этому адресу приведет к неопределенному поведению программы

Цитата Сообщение от dimcoder Посмотреть сообщение
Тогда уж, наверное:
не вижу принципиальной разницы
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
31.10.2011, 17:18     Недопонял... Помогите пожалуйста... Со строками... #9
dimcoder, разница была бы в таком случае:
C++
1
2
const char * const string;
string = "smth";
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
29.11.2011, 17:58  [ТС]     Недопонял... Помогите пожалуйста... Со строками... #10
Извиняюсь, что долго не отвечал в своей же теме...
Цитата Сообщение от Nameless One Посмотреть сообщение
нет, но попытка записи по этому адресу приведет к неопределенному поведению программы
К какому неопределенному поведению?

Короче говоря, остался один вопрос:
C++
1
2
char *s;
s = "Hello world!"
Удалит какие нибудь данные?
PS Извиняюсь за глупые вопросы и тавтологию.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
29.11.2011, 18:04     Недопонял... Помогите пожалуйста... Со строками... #11
Цитата Сообщение от dimcoder Посмотреть сообщение
К какому неопределенному поведению?
это значит, что при выполнении такого кода может произойти что угодно. Первый же пример в википедии как раз относится к твоей теме: http://en.wikipedia.org/wiki/Undefin..._C_and_C.2B.2B

Цитата Сообщение от dimcoder Посмотреть сообщение
Удалит какие нибудь данные?
нет
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 18:05     Недопонял... Помогите пожалуйста... Со строками... #12
Цитата Сообщение от dimcoder Посмотреть сообщение
Удалит какие нибудь данные?
Не удалит, но делать так нельзя. "Hello world" в данном случае является строковым литералом и находится в области памяти "только для чтения". Указатель же не является константным.
C
1
2
const char *s = NULL;
s = "Hello world!"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 13:30     Недопонял... Помогите пожалуйста... Со строками...
Еще ссылки по теме:

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

помогите пожалуйста !! - C++
Ввести структуру для описания комплексного числа . Составить и протестировать функции для преобразования комплексного числа из...

Помогите Пожалуйста !!! - C++
Помогите пожалуйста разобраться с прогой, голова уже разрывается на 100 маленьких кусочков. Как можно объяснить эти строки: char*...

Помогите пожалуйста. - C++
Помогите пожалуйста. Нужно что бы после метода выбора Гауса программа переходила к решению этим методом вот исходник. #include...


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

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
02.12.2011, 13:30  [ТС]     Недопонял... Помогите пожалуйста... Со строками... #13
fasked, Nameless One, спасибо за ответы. Более-менее прояснилось
Yandex
Объявления
02.12.2011, 13:30     Недопонял... Помогите пожалуйста... Со строками...
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru