c - 在 strftime 中使用指针目标 (C)

标签 c string time

首先,致歉: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/

相关文章:

Oracle PL/SQL 中的正则表达式从包含电话号码的字符串中删除不需要的字符

unordered_map 中字符串的 C++ 哈希函数

mysql - 令人困惑的时间输出

ios - 如何在iOS中找到线程状态?

perl - 给定日期,以 mm/dd/yyyy 为单位查找一年中的星期

c - 为什么这段代码会打印垃圾值?

C 打印出一个字符串数组

c - 使用 bsearch 其键值相当于数组元素,即指向 c 中 char 的指针

c++ - 用 For 循环或 If 语句包装字符串

c++ - 如何从 OpenSSL 释放 SSL 连接?