C - Неправильная комбинация указатель / целое в strftime () - PullRequest
3 голосов
/ 02 июня 2009

Я получаю ошибку компилятора: (83) ошибка: неправильная комбинация указатель / целое число: arg # 1.

Вот код, который делает это:

char boot_time[BUFSIZ];

... Строка 83:

strftime(boot_time, sizeof(boot_time), "%b %e %H:%M", localtime(table[0].time)); 

, где таблица - это структура, а время - член time_t.

Я прочитал, что «неправильный указатель / целочисленное сочетание» означает, что функция не определена (поскольку в C функции возвращают целые числа, когда они не найдены), и нормальным решением является включение некоторых библиотек. strftime () и localtime () находятся как в time.h, так и в sizeof () в string.h, оба из которых я включил (вместе с stdio.h). Я полностью озадачен здесь.

Ответы [ 4 ]

4 голосов
/ 02 июня 2009
struct tm * localtime ( const time_t * timer );

Правильное использование :

time_t rawtime;
localtime(&rawtime);

В вашем случае: localtime(&(table[0].time))

1 голос
/ 02 июня 2009

Проблема заключается в вызове по местному времени. Эта функция ожидает указатель time_t, а не значение. Я считаю, что вам нужно сделать ваш звонок следующим образом

localtime(&(table[0].time))

Подпись по местному времени

struct tm * localtime ( const time_t * timer );

Ссылка на API местного времени

1 голос
/ 02 июня 2009

localtime занимает time_t*, поэтому передайте &table[0].time (адрес, а не значение).

0 голосов
/ 02 июня 2009

Как уже упоминалось, особая проблема заключается в том, что вам нужно передать time_t * по местному времени.

Однако общая проблема заключалась в том, что у вас была неясная проблема на сложной линии, которая делала несколько вещей. Первое, что нужно попробовать, когда вы получили сообщение об ошибке, - это разбить строку на ее составные части, чтобы точно определить суть проблемы, например:

char boot_time[BUFSIZ];
// Temporary, putting the sizeof() call inline is normally better.
size_t boot_time_size = sizeof(boot_time); 
time_t temp_time = table[0].time;
// Use a more descriptive name here.
struct tm *mytime = localtime(temp_time); 

strftime(boot_time, boot_time_size, "%b %e %H:%M", mytime);

Таким образом, компилятор может сказать вам, какой вызов действительно доставляет вам проблемы. Как только вы поняли это, вы можете сжать его обратно, как считаете нужным, - я, вероятно, все равно оставлю вызов localtime () на отдельной линии, но это только я.

...