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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2012, 17:04   #1
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию Укзатели. Длина строки.

Решил написать программу, выдающую длину строки при помощи указателей.
Но что-то не работает. Какая-то Run-Time ошибка.
Может кто поможет?
Вот собственно и мой код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

int strlen(char *s);

int _tmain(int argc, _TCHAR* argv[])
{
	char *s,c;
	while ((c=getchar())!='\n')
	{
		*s++=c;
	}
	*s='\0';
	printf("%d\n",strlen(s));
	getchar();
	return 0;
}

int strlen(char *s)
{
	int n;
	for (n=0;*s!='\0';s++)
		n++;
	return n;
}
Chelovekpredel вне форума Ответить с цитированием
Старый 07.07.2012, 17:30   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

А память под строку кто выделять будет? s же неизвестно куда указывает, и туда что-то записывается.
Somebody вне форума Ответить с цитированием
Старый 07.07.2012, 17:35   #3
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию

И как это сделать. Напишите пожалуйста. А то я что-то не понял.
Chelovekpredel вне форума Ответить с цитированием
Старый 07.07.2012, 17:35   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Код:
	char *s = new char[255];
например

во-вторых - довольно спорный способ добавления символов в строку, по факту - вы записываете символ в память, а указатель строки сдвигаете вправо, в итоге вся строка остается за видимостью этой переменной

можете сделать например так:
Код:
	char *s = new char[255];
	char c=0;
	int d=0;
	while ((c=getchar())!='\n')
	{
		s[d++]=c;
	}
	s[d]='\0';
	printf("%d\n",strlen(s));
	getchar();
	return 0;
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 07.07.2012 в 17:42.
Zer0 вне форума Ответить с цитированием
Старый 07.07.2012, 18:36   #5
Chelovekpredel
Пользователь
 
Регистрация: 31.03.2012
Сообщений: 33
По умолчанию

а нельзя вместо :
Код:
s[d++]=c;
писать :
Код:
*s++=c
Собственно получается, что указатели не сильно помогают.
Chelovekpredel вне форума Ответить с цитированием
Старый 07.07.2012, 19:25   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Ну если очень нужны именно указатели, то так можно (но метод довольно странный на самом деле):
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

int strlen(char *s)
{
	int n;
	for (n=0;*s!='\0';s--)
		n++;
	return (n-1);
}

int _tmain(int argc, _TCHAR* argv[])
{
	char *s = new char[255];
	char c;
	*s++='\0';
	while ((c=getchar())!='\n')
	{
		*s++=c;
	}
	printf("%d\n",strlen(s));
	getchar();
	return 0;
}
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler длина строки Vitalii Помощь студентам 6 22.11.2011 23:14
Длина строки в TStringGrid Vova777 Общие вопросы Delphi 1 04.09.2011 20:57
длина строки в interbase xtrustx БД в Delphi 1 27.03.2011 21:30
длина строки в DBGridе? Милана666 БД в Delphi 5 20.05.2010 12:51
Длина строки С++ ArniLand Общие вопросы C/C++ 7 25.03.2010 10:59