Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2013, 17:42   #1
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию Указатель на двумерный массив

Здравствуйте.
Я столкнулся со следующей проблемой:
Есть функция которая принимает в качестве агрумента двумерный массив для заполнения
Код:
int lsmap(char *nmap[]);
int lsmap(char *nmap[])
{
	FILE *list;
	int mnt;
	list=fopen("maps.dat","rt");
	for (mnt=0;!feof(list);mnt++)
		if (!feof(list))
			fgets(nmap[mnt],256,list);
	return mnt-1;
}
Сам массив объявляется в main сл образом
Код:
char nmap[256][64];
И возвращается функции
Код:
levels=lsmap(nmap);
При этом компилятор выдает
Код:
arkanoid.c:128: warning: passing argument 1 of ‘lsmap’ from incompatible pointer type
arkanoid.c:35: note: expected ‘char **’ but argument is of type ‘char (*)[64]’
Из за того что я еще новичок в С, я не понимаю всех тонкостей этого прекрасного ЯП. Поэтому прошу дать мне правильный вариант кода.
В качестве компилятора используется GCC.
Evgenuych96 вне форума Ответить с цитированием
Старый 27.01.2013, 18:17   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Попробуйте не char*[], а char**
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 27.01.2013, 18:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
При этом компилятор выдает
А это не ошибки, а предупреждения.
Ты запускал программу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2013, 18:59   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Evgenuych96
выбирай
Код:
// ptr to first elem of array
void foo(int (*arr)[20])
{
}

// ptr to array
void bar(int (*arr)[10][20])
{
}

// c++ ver, ref to array
template <typename T, size_t N, size_t M>
void baz(T (&arr)[N][M])
{
}

int main() 
{
	int arr[10][20];
	foo(arr);
	bar(&arr);
	baz(arr);
        return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 28.01.2013, 11:16   #5
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А это не ошибки, а предупреждения.
Ты запускал программу?
Да, она выдавала ошибку сегментирования.
Evgenuych96 вне форума Ответить с цитированием
Старый 28.01.2013, 11:49   #6
Evgenuych96
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Evgenuych96
выбирай
Код:
// ptr to first elem of array
void foo(int (*arr)[20])
{
}

// ptr to array
void bar(int (*arr)[10][20])
{
}

// c++ ver, ref to array
template <typename T, size_t N, size_t M>
void baz(T (&arr)[N][M])
{
}

int main() 
{
	int arr[10][20];
	foo(arr);
	bar(&arr);
	baz(arr);
        return 0;
}
Благодарю за наводку. Я подправил функцию и теперь она выглядит так:
Код:
int lsmap(char (*nmap)[64]);
int lsmap(char (*nmap)[64])
{
	FILE *list;
	int mnt;
	list=fopen("maps.dat","rt");
	for (mnt=0;!feof(list);mnt++)
		if (!feof(list))
			fgets(nmap[mnt],256,list);
	return mnt-1;
}
Evgenuych96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CPP Указатель на статический двумерный массив Furchtlos Общие вопросы C/C++ 4 09.12.2011 20:29
Указатель на массив структур t2skler Общие вопросы C/C++ 2 02.12.2011 12:50
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
указатель на двумерный массив Aндрей Общие вопросы C/C++ 9 20.05.2010 09:40
указатель на массив Cpluser Общие вопросы C/C++ 6 23.09.2009 21:46