strtok_s 在 os x 上未定义
strtok_s is undefined on os x
我正在尝试使用 C11 函数 strtok_s,它应该在 <string.h>
中定义,但是当我尝试使用它时 clang 给我一个链接错误。编译此程序:
#include <string.h>
int main() {
char * buffer;
char * state;
rsize_t strmax = 0;
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
}
给我这个错误:
repro.c:7:15: warning: implicit declaration of function 'strtok_s' is invalid in
C99 [-Wimplicit-function-declaration]
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
^
repro.c:7:9: warning: incompatible integer to pointer conversion initializing
'char *' with an expression of type 'int' [-Wint-conversion]
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
Undefined symbols for architecture x86_64:
"_strtok_s", referenced from:
_main in repro-3dcfc9.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在 OS X 10.12.6 上使用 clang 8.1.0。我做错了什么?
http://en.cppreference.com/w/c/string/byte/strtok:
As all bounds-checked functions, strtok_s
is only guaranteed to be available if __STDC_LIB_EXT1__
is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__
to the integer constant 1
before including string.h
.
strtok_s
在C11中是可选的;老实说,只有 Windows 实现了它。在 POSIX 系统上使用 strtok_r
。
我正在尝试使用 C11 函数 strtok_s,它应该在 <string.h>
中定义,但是当我尝试使用它时 clang 给我一个链接错误。编译此程序:
#include <string.h>
int main() {
char * buffer;
char * state;
rsize_t strmax = 0;
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
}
给我这个错误:
repro.c:7:15: warning: implicit declaration of function 'strtok_s' is invalid in
C99 [-Wimplicit-function-declaration]
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
^
repro.c:7:9: warning: incompatible integer to pointer conversion initializing
'char *' with an expression of type 'int' [-Wint-conversion]
char * fpl = strtok_s(buffer, &strmax, "\n", &state);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
Undefined symbols for architecture x86_64:
"_strtok_s", referenced from:
_main in repro-3dcfc9.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在 OS X 10.12.6 上使用 clang 8.1.0。我做错了什么?
http://en.cppreference.com/w/c/string/byte/strtok:
As all bounds-checked functions,
strtok_s
is only guaranteed to be available if__STDC_LIB_EXT1__
is defined by the implementation and if the user defines__STDC_WANT_LIB_EXT1__
to the integer constant1
before includingstring.h
.
strtok_s
在C11中是可选的;老实说,只有 Windows 实现了它。在 POSIX 系统上使用 strtok_r
。