我正在尝试使用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)

为什么?

一些额外的信息:根据调试器,崩溃时,date123/23/2323format1"%d-%m-%Y",而timedata1NULL

最佳答案

在您的代码中:

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/

10-13 01:12