我正在尝试使用tm
函数将字符串解析为strptime()
结构。
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 = 0;
是相同的
struct tm *timedata1 = NULL;
因此,声明
strptime(date1, format1, timedata1);
是相同的
strptime(date1, format1, NULL);
也就是说,在您的代码中,您将
NULL
作为参数传递给strptime
,这将取消引用指针并产生未定义的行为/错误的访问。因此,您应该编写如下内容:
struct tm timedata1 = {0};
strptime(date1, format1, &timedata1);
关于c - strptime()导致EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45045086/