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

строка-указатель - C++

Восстановить пароль Регистрация
 
slipp1
12 / 11 / 1
Регистрация: 09.11.2012
Сообщений: 365
Записей в блоге: 1
12.05.2013, 01:16     строка-указатель #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
 
int main()
{
    char *original="1brainED 2brainED 3brainED notprint 4brainED 5brainED notprint 6brainED";
 
    while(*original!='\0')
    {
        cout<<"!!!!"<<endl;
    }
return 0;
}
строка указатель имеет ограничивающий нуль символ? нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 01:16     строка-указатель
Посмотрите здесь:

Командная строка. Безтиповой указатель. C++
C++ Функция принимает указатель на void и возвращает указатель на int
Указатель или ссылка на указатель. В чем разница? C++
Приведение любого двумерного массива к типу указатель на указатель C++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Precise
26 / 26 / 1
Регистрация: 20.05.2012
Сообщений: 43
12.05.2013, 01:34     строка-указатель #2
Как видно ниже в обоих случаех присутствует символ конца строки!
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
#include <iostream>
#include <string>
 
using namespace std;
 
 
int main()
{
    char *original1="brainED 2brainED 3brainED notprint 4brainED 5brainED notprint 6brainED";
    string original2="brainED 2brainED 3brainED notprint 4brainED 5brainED notprint 6brainED";
    int index = original2.size();
 
    if(original2[index]!='\0')
    {
        cout<<original2[index]<<endl;
    }
        cin.get();
 
    if(original1[index-1]!='\0')
    {
        cout<<original1[index-1]<<endl;
    }
    cin.get();
return 0;
}
slipp1
12 / 11 / 1
Регистрация: 09.11.2012
Сообщений: 365
Записей в блоге: 1
12.05.2013, 01:41  [ТС]     строка-указатель #3
почему тогда мой код не работает?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
 
int main()
{
    char *original="1brainED 2brainED 3brainED notprint 4brainED 5brainED notprint 6brainED";
 
    while(*original!='\0')
    {
        cout<<"!!!!"<<endl;
        original++;
    }
return 0;
}
исправил, пардон
Precise
26 / 26 / 1
Регистрация: 20.05.2012
Сообщений: 43
12.05.2013, 01:44     строка-указатель #4
Потому что *original - это первый символ вашей строки, вы в цикле сравниваете первый символ с нулевым символом, и у вас возникает бессконечный цикл! Напишите
C++
1
cout<<*original<<endl;
И убедитесь в моих словах. Теперь, все правильно!
Yandex
Объявления
12.05.2013, 01:44     строка-указатель
Ответ Создать тему
Опции темы

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