Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C strtok_s在OSX上未定义_C_String_Macos_Clang_Tr24731 - Fatal编程技术网

C strtok_s在OSX上未定义

C strtok_s在OSX上未定义,c,string,macos,clang,tr24731,C,String,Macos,Clang,Tr24731,我正在尝试使用C11函数,它应该在中定义,但是当我尝试使用它时,clang给了我一个链接错误。编译此程序: #include <string.h> int main() { char * buffer; char * state; rsize_t strmax = 0; char * fpl = strtok_s(buffer, &strmax, "\n", &state); } 我正在OSX10.12.6上使用Clang8.1.0

我正在尝试使用C11函数,它应该在中定义,但是当我尝试使用它时,clang给了我一个链接错误。编译此程序:

#include <string.h>

int main() {
    char * buffer;
    char * state;
    rsize_t strmax = 0;
    char * fpl = strtok_s(buffer, &strmax, "\n", &state);
}
我正在OSX10.12.6上使用Clang8.1.0。我做错了什么

与所有边界检查函数一样,只有在实现定义了uuuu STDC_LIB_EXT1_uuuuuu,并且用户在包含string.h之前将uuu STDC_WANT_LIB_EXT1_uuu定义为整数常量1时,才能保证strtok_s可用

:

与所有边界检查函数一样,只有在实现定义了uuuu STDC_LIB_EXT1_uuuuuu,并且用户在包含string.h之前将uuu STDC_WANT_LIB_EXT1_uuu定义为整数常量1时,才能保证strtok_s可用


在C11中,strtok_s是可选的;老实说,只有Windows实现了它。在POSIX系统上使用。

在C11中,strtok_s是可选的;老实说,只有Windows实现了它。在POSIX系统上使用。

非常感谢,不敢相信我错过了这一点非常感谢,不敢相信我错过了这一点,Windows甚至没有以C11附录K描述的方式实现边界检查接口,例如,没有设置约束处理程序的功能;相反,您必须使用MSVC特定的_set _invalid _parameter _handler函数,该函数采用完全不同的参数集。Windows甚至没有以C11附录K描述的方式实现边界检查接口,例如,没有set _constraint _handler函数;相反,您必须使用MSVC特定的_set_invalid_parameter_handler函数,该函数采用完全不同的参数集。缓冲区未设置为指向应用程序拥有的任何内存。调用strtok_s的结果是未定义的行为,可能导致seg故障事件。建议1将缓冲区中的值设置为指向应用程序拥有的字符数组。2将字符数组初始化为已知字符串。另请参见——并注意,C11标准附录K中定义的strtok_s与Windows上实现的strtok_s或POSIX系统上实现的strtok_r都不匹配——尽管Windows strtok_s和POSIX strtok_r基本上是等价的。缓冲区未设置为指向应用程序拥有的任何内存。调用strtok_s的结果是未定义的行为,可能导致seg故障事件。建议1将缓冲区中的值设置为指向应用程序拥有的字符数组。2将字符数组初始化为已知字符串。另请参见——并注意,C11标准附录K中定义的strtok_s与Windows上实现的strtok_s或POSIX系统上实现的strtok_r都不匹配——尽管Windows strtok_s和POSIX strtok_r基本上是等价的。
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)