2014 dxdy logo

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

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




 
 Присвоить значение лежащее по данному адресу
Сообщение18.04.2010, 16:13 
Здравствуйте, допустим у нас есть функция она возвращается указатель на строку:
Используется синтаксис C
char *func(const int *count)
 

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

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

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

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

 
 
 
 Re: Присвоить значение лежащие по данному адресу
Сообщение18.04.2010, 16:18 
Можно так:
Код:
strcpy(str, func(&count))
Но надёжнее так:
Код:
strncpy(str, func(&count), sizeof(str)-1)

 
 
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение18.04.2010, 16:27 
Спасибо!
А Вы не подскажите почему вариант с возвращением значения по адресу не работал? Как я подозреваю это из того, что строка массив...

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

 
 
 
 Re: Присвоить значение лежащее по данному адресу
Сообщение27.04.2010, 18:33 
Еще раз благодарю 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 
time_t - это целый тип. Функция time() возвращает в таком виде число секунд, прошедших с начала 1 января 1970 года по Гринвичу.
Чтобы увеличить значение time_t на 3 часа, надо прибавить количество секунд в 3-х часах - 3*3600.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group