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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2010, 21:59   #1
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
Печаль Указатели C

PHP код:
#include <stdio.h>
#include <string.h>
        
void change(char*);

void main()
{       
  
charstr;
  
change(str);                                                                                      
  
puts(str); // Здесь кракозябры. Почему?

  
return 0;
}       
void change(charstr)
{       
  
charstr1 "world";
  
str = &str1[0];
  
puts(str); // Здесь всё норм

Битый час не могу понять в чём трабла
gignet вне форума Ответить с цитированием
Старый 04.06.2010, 22:05   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Дык указатель-то теряется при выходе из функции. Хотите менять значение внешних указателей используйте двойные указатели или возвращайте значение:
Код:
#include <stdio.h>
#include <string.h>

void change(char**);

int main()
{
	char* str;
	change (&str);
	puts (str);
	
	return 0;
}

void change(char** str)
{
	char* str1 = "world";
	*str = &str1[0]; // или просто str1
	puts (*str);
}
netrino вне форума Ответить с цитированием
Старый 04.06.2010, 22:07   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы передаете указатель на символ, соответственно то что вы делаете str = &str1[0];
смысла не имеет по сути.
у вас не указатель на указатель(тогда вы бы сменили указатель)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.06.2010, 22:12   #4
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

Спасибо. Чёт сложно осознать конструкции типа p** =(. Вот только это не помогло =(.

Последний раз редактировалось gignet; 04.06.2010 в 22:16.
gignet вне форума Ответить с цитированием
Старый 04.06.2010, 22:51   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

char *s - указатель

char **s - двойной указатель или просто массив указателей
NiCola999 вне форума Ответить с цитированием
Старый 04.06.2010, 23:08   #6
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

Насколько я понял, указатель str по завершению работы change() указавыет на мусор.
Есть char* str в main() и char* str1="world" в change(); Покажите код, который позволил бы скопировать значение str1 в str (указателями,а не возвращением результата).
gignet вне форума Ответить с цитированием
Старый 04.06.2010, 23:17   #7
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

И покажите пример кода с exit(); Всё время ошибка выдает. Какие аргументы вводить. Что здесь не верно (Компилятор выдает предупреждение):
PHP код:
int x 0;
if (!
x) {
  
printf("Error: x = 0");
  exit(
0); // Какие аргументы?

gignet вне форума Ответить с цитированием
Старый 04.06.2010, 23:35   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

если надо выйти из программы то exit(1). Вообще для этой функции нужно stdlib.h подключить вроде
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Указатели KLOP Помощь студентам 4 06.03.2010 20:27
C++ (указатели). slim>>> Помощь студентам 8 03.03.2010 19:39
Указатели С++ MarihuanaP Помощь студентам 1 09.02.2010 17:06
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39