Ubuntu 17.10与GCC 7.2.0的strptime错误

时间:2018-03-22 00:56:55

标签: c gcc posix strptime

编译使用strptime的程序时:

gcc http_server.c -g -std=c11 -o http_server

我遇到了这个警告:

warning: implicit declaration of function 'strptime'; did you mean 'strftime'? [-Wimplicit-function-declaration]

当我运行程序时,我遇到了分段错误。在进一步调试后,我发现它在strptime()行失败了。我在文件中包含了time.h。我也使用标题中所述的gcc 7.2.0。任何帮助都会受到赞赏,因为我不知所措。

以下是我的代码中的一行:

const char TIME_FORMAT[] = "%a, %d %b %Y %H:%M:%S GMT\r\n";
char date[255];
strcpy(date, token + 19);
strptime(date, TIME_FORMAT, request->if_modified_since);

2 个答案:

答案 0 :(得分:2)

在编译器命令行上使用-D_XOPEN_SOURCE=700。仅-D_XOPEN_SOURCE相当于-D_XOPEN_SOURCE=1,并且不会宣布strptime()

您可以使用500或600而不是700;你不应该这样做。

您也可以使用-std=gnu11代替-std=c11,然后展示strptime(),无论是否有-D_XOPEN_SOURCE=700

您还可以考虑使用标头来确保正在使用正确的POSIX定义;这就是我的所作所为。见posixver.h,即 可以在我的SOQ GitHub上找到(Stack 溢出问题)存储库作为文件posixver.h src/libsoq 子目录。

答案 1 :(得分:0)

修正了分段错误。与strftime()不同,您需要为tm结构分配内存。补充说:

request->if_modified_since = (struct tm*) malloc( sizeof(struct tm) );

但是我仍然在编译时遇到麻烦的警告。我会给予帮助我解决问题的答案。