是否可以将格式说明符视为变量?
Is it possible to treat a format specifier as a variable?
我希望此函数能够根据 specifier
参数 return 来自给定 time_t
参数的数据。
如果说明符是 'd'
,它应该 return 月份中的第几天 (01-31);
如果说明符是 'W'
,它应该 return 一年中的第几周 (00-53)。
int get_number_atr_from_time(time_t raw_time, char specifier) {
struct tm *info = localtime(&raw_time);
char buffer[3];
strftime(buffer, 3, "%specifier", info);
return atoi(buffer);
}
这能以某种方式完成吗?
许多(如果不是 大多数 )标准 C 函数采用“格式”参数,例如 printf
和 – 如您的代码 – strftime
,将该参数作为 const char*
。但是,这 不 意味着它必须是 字符串文字 .
您声明并写入自己的任何 char
数组(即 而不是 const
)仍然可以作为 const char*
争论。因此,您可以将所需的格式说明符写入预先声明的 format
数组,然后将其传递给 strftime
函数。
在下面的代码中,我展示了如何通过将 'd'
和 'W'
分别传递给您的函数,然后将其(连同所需的 %
前缀)写入用于 strftime
调用的格式字符串。
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int get_number_atr_from_time(time_t raw_time, char specifier)
{
struct tm* info = localtime(&raw_time);
char buffer[3];
char format[3] = { '%', specifier, 0 }; // Initialize as "%X", where X is
strftime(buffer, 3, format, info); // "specifier" - and add null char
return atoi(buffer);
}
int main(void)
{
time_t tNow = time(NULL);
int dy = get_number_atr_from_time(tNow, 'd');
int wk = get_number_atr_from_time(tNow, 'W');
printf("D = %d, W = %d\n", dy, wk);
return 0;
}
截至发布日期的输出:
D = 13, W = 45
请注意,有许多更有效的方法可以从 time_t
或 struct tm
值中检索日和周值,但上面的代码显示了如何解决 具体问题。
只需使用复合文字:
strftime(buffer, 3, (char []){'%', specifier, 0}, info);
我希望此函数能够根据 specifier
参数 return 来自给定 time_t
参数的数据。
如果说明符是 'd'
,它应该 return 月份中的第几天 (01-31);
如果说明符是 'W'
,它应该 return 一年中的第几周 (00-53)。
int get_number_atr_from_time(time_t raw_time, char specifier) {
struct tm *info = localtime(&raw_time);
char buffer[3];
strftime(buffer, 3, "%specifier", info);
return atoi(buffer);
}
这能以某种方式完成吗?
许多(如果不是 大多数 )标准 C 函数采用“格式”参数,例如 printf
和 – 如您的代码 – strftime
,将该参数作为 const char*
。但是,这 不 意味着它必须是 字符串文字 .
您声明并写入自己的任何 char
数组(即 而不是 const
)仍然可以作为 const char*
争论。因此,您可以将所需的格式说明符写入预先声明的 format
数组,然后将其传递给 strftime
函数。
在下面的代码中,我展示了如何通过将 'd'
和 'W'
分别传递给您的函数,然后将其(连同所需的 %
前缀)写入用于 strftime
调用的格式字符串。
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int get_number_atr_from_time(time_t raw_time, char specifier)
{
struct tm* info = localtime(&raw_time);
char buffer[3];
char format[3] = { '%', specifier, 0 }; // Initialize as "%X", where X is
strftime(buffer, 3, format, info); // "specifier" - and add null char
return atoi(buffer);
}
int main(void)
{
time_t tNow = time(NULL);
int dy = get_number_atr_from_time(tNow, 'd');
int wk = get_number_atr_from_time(tNow, 'W');
printf("D = %d, W = %d\n", dy, wk);
return 0;
}
截至发布日期的输出:
D = 13, W = 45
请注意,有许多更有效的方法可以从 time_t
或 struct tm
值中检索日和周值,但上面的代码显示了如何解决 具体问题。
只需使用复合文字:
strftime(buffer, 3, (char []){'%', specifier, 0}, info);