在C / C ++中在本地时间和GMT / UTC之间转换

在C / C ++中,在本地时间和UTC之间转换日期时间的最佳方法是什么? “datetime”是指包含日期和时间的一些时间表示。 我会对time_t , struct tm或任何其他使其成为可能的表示感到满意。 我的平台是Linux。 这是我正在尝试解决的具体问题:我得到一对包含julian日期和一天中的秒数的值。 这些值是格林威治标准时间。 我需要将其转换为本地时区“YYYYMMDDHHMMSS”值。 我知道如何将朱利安日期转换为YMD,显然很容易将秒转换为HHMMSS。 然而,棘手的部分是时区转换。 我相信我可以找到解决方案,但我更愿意找到一种“标准”或“众所周知”的方式而不是磕磕绊绊。 可能相关的问题是在C中获取时区的夏令时转换日期

带有括号的typedef如“typedef int(f)(void)”是什么意思? 它是function原型吗?

typedef int (fc_name) (void); 这里fc_name是任何有效的C符号。 这与函数指针typedef有何不同?

在c中使用整数数组的memset

char str[]=”beautiful earth”; memset(str,’*’,6); printf(“%s”,str); output: ******ful earth 1)像上面使用的memset一样,我们只能初始化几个整数数组索引值为1,如下所示? int arr[15]; memset(arr,1,6);

查找给定整数的所有精确除数的算法

我想找到一个数字的所有确切除数。 目前我有这个: { int n; int i=2; scanf(“%d”,&n); while(i<=n/2) { if(n%i==0) printf("%d,",i); i++; } getch(); } 有没有办法改善它?

在C中自动刷新stdout缓冲区的规则是什么?

我只是好奇应该满足哪些条件来自动刷新stdout缓冲区。 首先,我很困惑这个伪代码不会在每次迭代时打印输出: while (1) { printf(“Any text”); sleep(1); } 但如果我添加换行符,它会。 经过几次实验,我发现在我的机器上stdout缓冲区被刷新: 当我输入1025个或更多字符时; 当我读到标准时; 当我把换行符添加到stdout时; 第一个条件是完全清楚的 – 当缓冲区已满时,应该刷新它。 第二个也是合理的。 但为什么换行符导致潮红? 其他隐含条件是什么?

while循环第二次忽略scanf

#include int main () { char loop=’y’; while(loop != ‘n’) { printf(“loop? “); scanf(“%c”, &loop); if(loop != ‘y’) { loop=’n’; } } return 0; } 如果我键入’y’,他会重新启动while循环,但会在第二次忽略scanf并在此之后结束循环。 有人可以帮忙吗?

查找已知的整数键集

Gperf在我的环境中一直表现不及Judy数组,我想知道是否还有另一个专门为整数键构建的完美哈希库。 我事先知道了这组键,我想利用它来获得性能/尺寸优势。 有大约1000个密钥,并且检索不按顺序排列。 密钥对都是整数。 密钥为32位,检索值为8位。 尺寸是最重要的因素。 如果有一种方法可以调整Gperf的整数键,或者只是一般的另一种方法,我也是耳朵。 🙂 (旁注:……在输入这个问题的时候,我意识到二元搜索可能会占用蛋糕而我只是过度思考问题。我仍然希望听到你为了学习而有任何想法,虽然!) 编辑:键不均匀分布。 大多数都是在整个可能的范围内随机聚集的。 编辑2:最坏情况下的二进制搜索对我来说太慢了,所以我最后玩了键,直到我发现每个都使用8位来制作256个分布均匀的桶。 我保持每个桶的最小值和最大值(每个桶入口24位),并为密钥对制作了一个大的结构数组。 比我为我的特定情况测试过的其他所有东西都要小,更快,更小,所以我想我现在要用它。 🙂

printf指定float的整数格式字符串

#include int main() { float a = 5; printf(“%d”, a); return 0; } 这给出了输出: 0 为什么输出为零?

初始化指针时的字符串文字与char数组

灵感来自这个问题 。 我们可以用字符串文字初始化一个char指针: char *p = “ab”; 它完全没问题。 人们可以认为它等同于以下内容: char *p = {‘a’, ‘b’, ‘\0′}; 但显然事实并非如此。 并且不仅因为字符串文字存储在只读内存中,而且看起来即使通过字符串文字具有char数组类型,并且初始化程序{…}具有char数组的类型,两个声明也是由于编译器发出警告,处理方式不同: 警告:标量初始化程序中的多余元素 在第二种情况下。 这种行为的解释是什么? 更新: 此外,在后一种情况下,指针p将具有值0x61 (第一个数组元素’a’ )而不是存储器位置,这样编译器就像警告一样,仅占用初始化器的第一个元素,将其分配给p 。

使用scanf()读取一行不好?

scanf(” %[^\n]”,line); 我的一个朋友建议使用fgets()读取一行作为输入比使用上面的语句中的scanf()更好。 他有道理吗?