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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 18:12   #1
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию помощь по массивам на С

Привет всем!
хотел бы попросить объяснить кто знает, в чем ошибка?
Код:
#include <stdio.h>
#include <string.h>
int checkLen(char *ptr)
{
	char *p = ptr;
	int cnt = 0;
	while (*p != '\0')
	{
		if (*p)
			cnt++;
		p++;

	}
	printf("cnt is: %d", cnt);
	return cnt;
}
char * init_f()
{
	char str[30];
	printf("Enter your string\n");
	gets(str);
	return str;
}
void main()
{
	char *ptr;
	int n;
	ptr = init_f();
	n = checkLen(ptr);
}
больше знаю, лучше сплю)

Последний раз редактировалось nwhta; 10.02.2015 в 20:29.
nwhta вне форума Ответить с цитированием
Старый 10.02.2015, 18:59   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А в чем действительно ошибка то?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.02.2015, 20:04   #3
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

при дебаге в visual studio 13, в функции checkLen почему то пойнтер p теряет адресс переданный ей..............
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 10.02.2015, 20:23   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Значит не нултерминированная строка передается.
Что значит теряется??
а функция strlen() чем не понравилась?

PS: И код оформите правильно.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.02.2015, 20:26   #5
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

понравилась конечно, просто пытаюсь попрактиковаться перед экзаменами..............
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 10.02.2015, 20:37   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от nwhta Посмотреть сообщение
понравилась конечно, просто пытаюсь попрактиковаться перед экзаменами..............
ну так если в отладке проследить пошагово? неужели там не видно будет в какой момент уходит?
if внутри while явно лишний.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 10.02.2015 в 20:40.
WorldMaster вне форума Ответить с цитированием
Старый 10.02.2015, 20:48   #7
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
ну так если в отладке проследить пошагово? неужели там не видно будет в какой момент уходит?
if внутри while явно лишний.
конечно видно я же написал...................при передачи адреса поинтеру p
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 10.02.2015, 21:04   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Так вы неправильно указатель передаете.
Массив char str[30]; созданный в функции перестает существовать после выхода из нее.
Чтобы он существовал надо делать malloc

Код:
char * init_f()
{
	char* ptr = new char[30];
	printf("Enter your string\n");
	gets(ptr);
	return ptr;
}
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 10.02.2015 в 21:15.
WorldMaster вне форума Ответить с цитированием
Старый 10.02.2015, 21:07   #9
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Так вы неправильно указатель передаете. Щас разберемся...
ой а можете сказать что не так?
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 10.02.2015, 21:18   #10
Jurijus123
Заблокирован
 
Регистрация: 12.11.2014
Сообщений: 120
По умолчанию

программа делает тоже самое у вас слишком много лишнего:
и так ошибок нет.
Код:
#include <iostream>
void main()
{
		char str[30];
	printf("Enter your string\n");
	gets(str);
      char *p = str;
	int cnt = 0;
	while (*p != '\0')
	{
		if (*p)
		cnt++;
		p++;
	}
	printf("cnt is: %d", cnt);
	std::cout<<cnt;
}
Jurijus123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по массивам мар5094 Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2010 16:04
Задача по массивам) Flo Помощь студентам 1 30.11.2010 22:09
по массивам lilia2121 Помощь студентам 3 15.04.2010 13:05
Требуется помощь по двумерным массивам в C++ builder 2006. Vergil Помощь студентам 21 12.11.2009 18:29