编译使用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);
答案 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) );
但是我仍然在编译时遇到麻烦的警告。我会给予帮助我解决问题的答案。