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

Указатель на двумерный массив символов - C++

Восстановить пароль Регистрация
 
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
10.03.2014, 13:19     Указатель на двумерный массив символов #1
Доброго времени суток.
Особо не сталкивался со строками, но сейчас возникла необходимость, так же возникли и проблемы.
Пытаюсь реализовать ввод строки(scanf) и ее вывод(printf).
Проблема в том, что при компиляции(MinGW), консоль начинает вести себя "неадекватно", выскакивает окошко(завершение программы).
Реализацию через string не предлагать, прошу объяснить, что не так в данном коде.

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
#include <stdio.h>
 
void write_data(char **pas, int );
 
int main()
{
    int N = 1, K;
    char *passenger[N];
 
    /*scanf("%s", passenger[0]);
    printf("%s\n", passenger[0]);*/
    write_data(passenger, N);
 
    return 0;
}
 
void write_data(char **pas, int n)
{
    //for(int i = 0; i < n; i++)
    //{
        scanf("%s", *pas[0]);
        printf("%s\n", *pas[0]);
    //}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 13:19     Указатель на двумерный массив символов
Посмотрите здесь:

C++ Указатель на двумерный массив
Указатель на двумерный массив C++
Указатель на двумерный массив C++
указатель на двумерный массив C++
C++ Указатель на двумерный массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
10.03.2014, 13:56     Указатель на двумерный массив символов #2
Цитата Сообщение от Ryuk Посмотреть сообщение
C++
1
char *passenger[N];
У тебя вот здесь определен массив указателей (char*) размерности N. Памяти под сами строки ты не выделял. Отсюда и поведение "неадекватное".

Добавлено через 4 минуты
Цитата Сообщение от Ryuk Посмотреть сообщение
C++
1
int N = 1
N - в подобном коде на С++ должна быть константой. (Да, gcc это собирает и для Си++, но легально это только для Си. Если же мы говорим о Си, тогда мы не том разделе).
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
10.03.2014, 14:06  [ТС]     Указатель на двумерный массив символов #3
DrOffset,
Цитата Сообщение от DrOffset Посмотреть сообщение
тогда мы не том разделе
В разделе по Си, ответ ждать долго, а т.к. большинство программистов знает вместе с Си С++, то тема в этом разделе.
Цитата Сообщение от DrOffset Посмотреть сообщение
но легально это только для Си
Покажите как надо, ведь я выделяю фактически указатель на указатель.

Что касается С++, то если мне нужно вводить размерность N(кол-во строк) и эта же N - константа, то вопрос решается только динамически?
Jupiter
10.03.2014, 14:09
  #4

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
но легально это только для Си
<= С99

DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
10.03.2014, 14:22     Указатель на двумерный массив символов #5
Цитата Сообщение от Ryuk Посмотреть сообщение
вопрос решается только динамически?
Да. Тут важно понимать, что память под массив в твоем примере выдялется на стеке, а он далеко не бесконечный. Из этих соображений это запрещено в стандартном С++.

Цитата Сообщение от Ryuk Посмотреть сообщение
Покажите как надо
В самом простейшем варианте - так:
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 <stdio.h>
 
const int S = 256;
 
void write_data(char * pas);
 
int main()
{
    const int N = 1;
    char passenger[S][N];
 
    for(int i = 0; i < N; i++)
    {
        write_data(passenger[i]);
    }
    return 0;
}
 
void write_data(char * pas)
{
    scanf("%256s", pas); // ограничим максимальную длину, чтобы не было переполнения
    printf("%s\n", pas);
}
Добавлено через 5 минут

Не по теме:

Jupiter, да, спасибо, я в курсе.

Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
10.03.2014, 15:19  [ТС]     Указатель на двумерный массив символов #6
DrOffset, а если нам нужно вводить кол-во строк, тогда что?
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
10.03.2014, 15:29     Указатель на двумерный массив символов #7
Ryuk, тогда динамическая память. В С++ для этого есть удобные классы. Если надо без них, или на С, то следить за памятью придется вручную.
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
10.03.2014, 15:41  [ТС]     Указатель на двумерный массив символов #8
DrOffset, пример программы на Си можете привести(через динамику)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 15:58     Указатель на двумерный массив символов
Еще ссылки по теме:

C++ указатель на двумерный массив
Указатель на двумерный массив указателей C++
C++ Двумерный массив через указатель

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.03.2014, 15:58     Указатель на двумерный массив символов #9
Цитата Сообщение от Ryuk Посмотреть сообщение
пример
тут есть пример, адаптируй, тыжпрограммист
Yandex
Объявления
10.03.2014, 15:58     Указатель на двумерный массив символов
Ответ Создать тему
Опции темы

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