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

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

Войти
Регистрация
Восстановить пароль
 
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
#1

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

10.03.2014, 13:19. Просмотров 423. Ответов 8
Метки нет (Все метки)

Доброго времени суток.
Особо не сталкивался со строками, но сейчас возникла необходимость, так же возникли и проблемы.
Пытаюсь реализовать ввод строки(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]);
    //}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 13:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на двумерный массив символов (C++):

Указатель на двумерный массив - C++
Допустим, у меня есть функция: void A(float **b) { b=1; } Тогда почему выдает ошибку при следующем: const int a=100;

указатель на двумерный массив - C++
Делая игру морской бой, я столкнулся с 1-ой проблемой: void place_ships(char &amp;(&amp;(map+13)+29)) //или (char **map) или (char &amp;map) или...

Указатель на двумерный массив - C++
Здравствуйте. Подскажите пожалуйста, а существуют ли в C/C++ указатели: 1) на двух-трёхмерные массивы 2) на массивы из строк...

Указатель на двумерный массив - C++
Как сделать то же самое с двумерным массивом? Как работать с двумерными или n- мерными массивами через указатель? #include &lt;iostream&gt; ...

Указатель на двумерный массив - C++
хочу заменить вот такую запись: fs.read((char*)&amp;size_struct, sizeof(int)); fs.read((char*)&amp;size_arr, sizeof(int)); char * item0 =...

Указатель на двумерный массив - C++
A эквивалентно *(*(A+i)+j). Просто давайте допустим, что у нас матрица A. Как вычислить допустим А?

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

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

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

Не по теме:

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

0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
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, да, спасибо, я в курсе.

1
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
10.03.2014, 15:19  [ТС] #6
DrOffset, а если нам нужно вводить кол-во строк, тогда что?
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
10.03.2014, 15:29 #7
Ryuk, тогда динамическая память. В С++ для этого есть удобные классы. Если надо без них, или на С, то следить за памятью придется вручную.
0
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
10.03.2014, 15:41  [ТС] #8
DrOffset, пример программы на Си можете привести(через динамику)?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.03.2014, 15:58 #9
Цитата Сообщение от Ryuk Посмотреть сообщение
пример
тут есть пример, адаптируй, тыжпрограммист
1
10.03.2014, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2014, 15:58
Привет! Вот еще темы с ответами:

Указатель на двумерный массив и выше - C++
Всем привет!Сразу к делу. Я решил по лучше разобраться в указателях и столкнулся с таким вопросом как реализовать такую вещь именно так...

Двумерный массив через указатель - C++
как вывести двумерный массив через указатель? с одномерным понятно,а как так же с двумерным сделать? int a = { 1, 2, 3, 4, 5 }; ...

Указатель на двумерный массив указателей - C++
char* err = {{&quot;abc&quot;}, {&quot;def&quot;}}; char ***ptr; ptr = (char ***)err; printf(&quot;%s, %s&quot;, *err + 2, *ptr + 2);Добрый день всем, есть...

Функция, возвращающая указатель на двумерный массив - C++
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и как работает: #include &lt;stdio.h&gt; ...


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

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

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