Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
AnreyKazakov
Заблокирован
#1

Не работает strcmp + указатели непойми что опять выводят - C++

11.09.2012, 00:01. Просмотров 773. Ответов 4
Метки нет (Все метки)

Странно все это в одном примере работает strcmp в другом (здесь) не работает. Не могу понять почему, пока разбирался решил проверить на какой адрес указатель показывает, а он почему-то не меняет свое значение. Очень странно....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <cstring>
int main(){
    const char* line1="Hello";
    const char* line2="World";
    std::cout<<&line1<<" "<<&line2<<std::endl;
    while(*line1!='\0'){
        std::cout<<*line1<<std::endl;
        std::cout<<&line1<<std::endl;
        ++line1;/*так как идет приращение я думал, что адрес памяти
в строчке сверху будет меняться, а он какой-то константный....*/
        }
        std::cout<<" ";
    while(*line2!='\0'){
        std::cout<<*line2;
        ++line2;
        }   
        std::cout<<std::endl;
        std::cout<<&line1<<" "<<&line2<<std::endl;
        int i=strcmp(line1,line2);/*независимо от значений массивов line1
line 2 значение i равно 0 , что вообще не вписывается в мое понимание этого мира....как так?*/
        std::cout<<i<<std::endl;
    if(strcmp(line1,line2)==0){std::cout<<"TRUE";}else{std::cout<<"FALSE";}
    std::cout<<std::endl;
    return 0;
    }
непонятно в общем чет совсем =(

Добавлено через 36 минут
Очень все это странно, когда второй while убираешь, то все ок...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
int main(){
    const char* line1="Hello";
    const char* line2="World";
    while(*line1!='\0'){
        std::cout<<*line1;
        ++line1;
        }
        std::cout<<" ";
    /*while(*line2!='\0'){
        std::cout<<*line2;
        ++line2;
        }   */
        std::cout<<std::endl;
        int i=strcmp(line1,line2);
        std::cout<<i<<std::endl;
    if(strcmp(line1,line2)==0){std::cout<<"TRUE";}else{std::cout<<"FALSE";}
    std::cout<<std::endl;
    return 0;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2012, 00:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает strcmp + указатели непойми что опять выводят (C++):

Опять указатели - C++
Здравствуйте. Изучаю эти туториалы: http://www.rastertek.com/dx11tut03.html В конце есть упражнение: конфигурацию видеокарты вывести в...

strcmp не работает! - C++
Ниже изложенная функция должна проверять не выходит ли за данный диапазон введенное число. Загвоздка вот в чем: strcmp сравнивает строки...

Не работает strcmp - C++
Подскажите, пожалуйста, условие не срабатывает (14 строка), хотя должно visits++ делать. В строке tmp_month находится строка &quot;Sep&quot;. ...

Что делает функция strcmp(s1,s2) ? - C++
Функция strcmp(s1,s2)…что она делает?

Неправильно работает функция strcmp c русскими буквами - C++
Пытаюсь сравнить строку с литералом. void main() { setlocale(LC_ALL, &quot;Rus&quot;); string s1; cin &gt;&gt; s1; int k =...

Не верно работает strcmp при сравнении двух слов - C++
Добрый вечер уважаемые программисты! В общем проблема в следующем, надо из файла F1 скопировать все строки в F2 в которых нет повторяющихся...

4
Jupiter
Каратель
Эксперт С++
6566 / 3987 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.09.2012, 00:19 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
   const char* str = "hello";
   
   while (*str)
   {
      std::cout << *str << '\n';
      std::cout << static_cast<const void*>(str++) << '\n';
   }
}
http://liveworkspace.org/code/6d82a72fdbebecd30845e31d06baf570
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
C++
1
std::cout<<&line1<<std::endl;
выводишь адрес указателя
1
rangerx
1940 / 1549 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
11.09.2012, 00:20 #3
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
std::cout<<&line1<<std::endl;
++line1;/*так как идет приращение я думал, что адрес памяти
в строчке сверху будет меняться, а он какой-то константный....*/
Операция инкремента применительно к указателю не меняет его собственный адрес, а заставляет его указывать на следующую ячейку памяти. Адрес текущего символа на который указывает указатель можно вывести так
C++
1
std::cout << static_cast<const void*>(line1) << std::endl;
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
int i=strcmp(line1,line2);/*независимо от значений массивов line1
line 2 значение i равно 0 , что вообще не вписывается в мое понимание этого мира....как так?*/
После того как вы прогнали эти два цикла
C++
1
2
while(*line1!='\0') ...
while(*line2!='\0') ...
оба указателя стали указывать на конец своих строк, т.е. на символ '\0', следовательно функция strcmp расценивает строки как равные и возвращает 0.
1
AnreyKazakov
Заблокирован
11.09.2012, 00:40  [ТС] #4
Разобрался, спасибо за помощь
0
Elboy
131 / 112 / 4
Регистрация: 01.09.2012
Сообщений: 288
11.09.2012, 00:44 #5
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
const char* line1="Hello"; const char* line2="World";
В этом случае можно изменить то, на что указывает line1, line2, а *line1, *line2 - нельзя.

В случае
C
1
2
char *const line1 = "Hello";
char *const line2 = "World";
Инкремент указателя слова не пройдёт
0
11.09.2012, 00:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 00:44
Привет! Вот еще темы с ответами:

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

EditBox и непойми что с выводом - C++ WinAPI
Работаю с EditBox. Вывожу туда сообщения при помощи EM_REPLACESEL, который, как написано на msdn, получает &quot;A pointer to a null-terminated...

Опять эти указатели - C++ Builder
Здравствуйте! Какие не понятные явления происходят после удаления объекта P (вылетает ошибка в библиотеку борланда). Как её можно...

наушники не выводят звук и ноутбука, что делать? - Ноутбуки
Вечер добрый!Помогите разобраться.У меня ноутбук acer, купила наушники-они абсолютно рабочие и работали на моем компе примерно неделю.Потом...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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