2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Присвоить значение лежащее по данному адресу
Сообщение18.04.2010, 16:13 


13/09/09
72
Здравствуйте, допустим у нас есть функция она возвращается указатель на строку:
Используется синтаксис C
char *func(const int *count)
 

И у меня возникла проблема, как присвоить эту строку, строке вызывающей функции? (Масло масленое, да)
Т.е:
  1. printf(func(&)); 

Работает.
Оно и понятно, т.к там требуется указатель, а вот:
  1. char str[100]; 
  2. str = &func(&count); 

Нет. Без унарного оператора & тоже собственно не работает.

Что сделать, чтобы присвоить строку?

 Профиль  
                  
 
 Re: Присвоить значение лежащие по данному адресу
Сообщение18.04.2010, 16:18 
Заслуженный участник


09/08/09
3438
С.Петербург
Можно так:
Код:
strcpy(str, func(&count))
Но надёжнее так:
Код:
strncpy(str, func(&count), sizeof(str)-1)

 Профиль  
                  
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение18.04.2010, 16:27 


13/09/09
72
Спасибо!
А Вы не подскажите почему вариант с возвращением значения по адресу не работал? Как я подозреваю это из того, что строка массив...

 Профиль  
                  
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение18.04.2010, 16:43 
Заслуженный участник


09/08/09
3438
С.Петербург
str у Вас -- это массив. Массиву в C присвоить ничего нельзя. Если бы у Вас переменная str была описана как
Код:
char *str;
, то присваивание
Код:
str = func(&count);
было бы возможно.
Но только учтите, что синтаксическая правильность программы -- это ещё не всё. В любом случае, для того, чтобы понять, что можно и чего нельзя делать с возвращаемой функцией func строкой, надо смотреть на её реализацию.

 Профиль  
                  
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение27.04.2010, 18:33 


13/09/09
72
Еще раз благодарю Maslov'а за помощь, но у меня новая беда, в этот раз с заголовком time.h.
Мне в программе надо реализовать определение текущего времени и далее проводить некоторые операции с этим текущем временем.
Получаем текущее время:
Код:
time_t t;
t = time(NULL);

Все ок.
Но теперь мне надо например изменить старое значение. Например на 3 три часа.
Как я понимаю напрямую с типом time_t работать нельзя, поэтому мы должны перевести тип в структуру:
Код:
time_t t;
struct tm *local;

t = time(NULL);
local = localtime(&t);

Но собственно проблема у меня возникает аналогичная. Есть указатель на объект, а нужен сам объект.

Я конечно понимаю, что значение time_t можно перевести в строку, потом эту строку перевести в число, а потом уже создать структуру и в нее это записать измененное значение, но это немного стрёмно.

 Профиль  
                  
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение27.04.2010, 18:47 
Заслуженный участник


04/05/09
4582
time_t - это целый тип. Функция time() возвращает в таком виде число секунд, прошедших с начала 1 января 1970 года по Гринвичу.
Чтобы увеличить значение time_t на 3 часа, надо прибавить количество секунд в 3-х часах - 3*3600.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group