【发布时间】:2017-07-11 21:54:23
【问题描述】:
我正在尝试使用 strptime() 函数将字符串解析为 tm 结构。
int main(int argc, const char * argv[]) {
char raw_date1[100];
char date1[100];
struct tm *timedata1 = 0;
printf("please provide the first date:");
fgets(raw_date1, sizeof(raw_date1), stdin);
strip_newline(date1, raw_date1, sizeof(raw_date1));
char format1[50] = "%d-%m-%Y";
strptime(date1, format1, timedata1);
在最后一行,程序崩溃并显示以下消息:EXC_BAD_ACCESS (code=1, address=0x20)。
为什么?
一些额外信息:根据调试器,在崩溃时,date1 是 23/23/2323,format1 是 "%d-%m-%Y" 和 timedata1 是 NULL。
【问题讨论】:
-
试试
struct tm timedata1;..strptime(date1, format1, &timedata1); -
成功了。不过,我不明白为什么。对我来说,
timedata1如果声明为struct tm *timedata;与&timedata1如果timedata1声明为struct tm timedata;相同。 -
strptime()函数想要写入您应该传递给它的struct tm。你传递了一个空指针;它很沮丧。 -
struct tm *timedata1 = 0;定义了一个指针,并将其初始化为 0,即 NULL。取消引用 NULL 指针会导致异常。 -
好的。即使我没有初始化
timedata1并且只声明它,为什么问题仍然存在? (请参阅我在 Stephan Lechner 的回答下的问题)