LINUX.ORG.RU

struct tm и преобразование int в char*


0

1

Всем доброго времени При написании программы возникла необходимость получать местное время в формате Час Мин Дат Мес Год, и после этого записывать в файл я начинаю делать так :)

int run_clock_options(){
	struct tm *ptr;
	char *msg, *temp;
	int file_n, position = 21, min;
	unsigned short int key;
	
	time_t lt = time(NULL);
	ptr = localtime(&lt);
	file_n = open("/home/user/time",O_WRONLY);
	if (file_n ==-1){
		printf("Не удаеться открыть файл");
	}
	itoa(ptr->tm_min,min,2);

	write(file_n, /*itoa*/, 2);
	close(file_n);

	return 0;
}

но что-то мой компилятор не хочет брать itoa.. как это реализовать?

WTF «что-то мой компилятор не хочет брать itoa..»?

strangeman ★★★★ ()
Ответ на: комментарий от strangeman

[code]/usr/include/unistd.h:363:16: note: expected ‘const void *’ but argument is of type ‘int’ /tmp/cckPpjyV.o: In function `run_clock_options': run_clock_options.c:(.text+0x294): undefined reference to `itoa' collect2: ld returned 1 exit status[/code]

Mish_ka ()

struct tm *ptr; заменить на struct tm ptr;

struct tm ptr = *localtime(&now);

man:

The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the  date  and  time  functions.

И еще есть удобная функция strftime

Eddy_Em ☆☆☆☆☆ ()

Кстати, а что за функция такая itoa?

Eddy_Em ☆☆☆☆☆ ()

#include <stdlib.h> включал?

RA ()

min должен быть байтовым массивом

char * itoa ( int value, char * str, int base );

RA ()

char *res=itoa(ptr->tm_min,min,2);

write(file_n, res, 2);

RA ()
Ответ на: комментарий от RA

Не существует:

grep -r itoa /usr/include/*
/usr/include/lcms.h:#ifndef itoa
/usr/include/lcms.h:#       define itoa   _itoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_itoa        itoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_itoa(value, string, radix)	SDL_ltoa((long)value, string, radix)
/usr/include/SDL/SDL_stdinc.h:#define SDL_uitoa       _uitoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_uitoa(value, string, radix)	SDL_ultoa((long)value, string, radix)

Eddy_Em ☆☆☆☆☆ ()

но что-то мой компилятор не хочет брать itoa.. как это реализовать?

а snprintf чем не устраивает?

Reset ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Если уж на то пошло, то твое исправление ничем не поможет. Если такая проблема в программе действительно существует (что по коду не очевидно), то надо использовать localtime_r

Reset ★★★★★ ()
Ответ на: комментарий от Reset

О, спец подтянулся.

Reset, что за функция такая itoa? Она реально существует где-нибудь, кроме SDL?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от RA

itoa

конвертирует int в строку

$  man itoa
Нет справочной страницы для itoa
geekless ★★ ()
Ответ на: комментарий от strangeman

Portability

This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.

geekless ★★ ()
Ответ на: комментарий от Reset

Тогда что это делает на ЛОРе?

И вообще ведь sprintf есть, а для работы с временем - strftime.

Похоже, все-таки ТС в мастдае сидит, раз команду man набрать не может.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Reset

Спасибо за функцию :) с ней все у меня получилось :)

Теперь мне необходимо изменять системное время в процессе выполнения своей программы..

Вроде как функция stime, но примера реализации нормального не нашел =(

Mish_ka ()
Ответ на: комментарий от Mish_ka

> примера реализации нормального не нашел =(

Исходники date из coreutil сойдут в качестве примера?

geekless ★★ ()

Как-то нехорошо строка min объявляется. Совсем уж не хорошо.

Roland ()
Ответ на: комментарий от Reset

>а snprintf чем не устраивает?

Разве sprintf умеет записать int в двоичной системе?

Roland ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.