默认字符串处理函数不安全。C11标准包括更安全的字符串处理函数的可选版本。
所有可选的C11函数都具有以_s
结尾的名称。要确定标准库是否支持可选功能,请使用以下代码:
#include <stdio.h>
int main(void)
{
#if defined __STDC_LIB_EXT1__
printf("Optional functions are defined.\n");
#else
printf("Optional functions are not defined.\n");
#endif
return 0;
}
根据C11标准实现可选功能的编译器将定义符号__STDC_LIB_EXT1__
。
此代码使用预处理程序指令插入两个printf()
语句之一,具体取决于是否定义了符号__STDC_LIB_EXT1__
。
要使用string.h
中的可选函数,请在源文件中定义__STDC_WANT_LIB_EXT1__
符号,要在的include <string.h>
指令之前指定:
#define __STDC_WANT_LIB_EXT1__ 1 // Make optional versions of functions available
#include <string.h> // Header for string functions
如果未将此符号定义为1
,则只有标准的字符串处理函数集可用。