首先,致歉:C 语言的新手,并且总体上在编码方面相当绿色。
问题:尝试使用 strftime() 在 C 中创建时间戳。 这有效:
#include <time.h>
...
char timestamp[14];
...[code to define timestruct]
strftime(timestamp,15,"%Y%m%d%H%M%S", timestruct);
但是这给出了段错误:
#include <time.h>
...
char *timestamp;
...[code to define timestruct]
strftime(timestamp,15,"%Y%m%d%H%M%S", timestruct);
显然,我有一个有效的解决方案,所以基本上一切都很好。但是为什么以timestamp
为指针的版本不起作用呢?
提前致谢。
最佳答案
C 中的指针要求您在堆上为它们分配空间。在第一种情况下,当您声明 char timestamp[14]
时,括号中的 14 告诉编译器在堆栈上为时间戳分配 14 个字节。所以你可以将它用于短于 14 字节的字符串,你会没事的。
在第二种情况下,您声明了 char *timestamp
但不为其分配任何内存。因此,当 strftime
尝试写入它时,它正在写入它无权访问的无效内存,因此您会遇到段错误。要解决此问题,您需要通过 char *timestamp = malloc(14)
为时间戳分配内存。这会将时间戳指向在它可以使用的堆上分配的 14 个字节。此方法的问题是您必须在使用完后通过调用 free(timestamp)
手动释放内存。
如果 timestamp
是一个局部变量,它的存在时间不需要超过它所在的函数的范围,那么第一种方法是首选,因为它会自动被清除。
关于c - 在 strftime 中使用指针目标 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419928/