# CategoryStdinc

SDL provides its own implementation of some of the most important C runtime
functions.

Using these functions allows an app to have access to common C
functionality without depending on a specific C runtime (or a C runtime at
all). More importantly, the SDL implementations work identically across
platforms, so apps can avoid surprises like snprintf() behaving differently
between Windows and Linux builds, or itoa() only existing on some
platforms.

For many of the most common functions, like [SDL_memcpy](SDL_memcpy), SDL
might just call through to the usual C runtime behind the scenes, if it
makes sense to do so (if it's faster and always available/reliable on a
given platform), reducing library size and offering the most optimized
option.

SDL also offers other C-runtime-adjacent functionality in this header that
either isn't, strictly speaking, part of any C runtime standards, like
[SDL_crc32](SDL_crc32)() and [SDL_reinterpret_cast](SDL_reinterpret_cast),
etc. It also offers a few better options, like
[SDL_strlcpy](SDL_strlcpy)(), which functions as a safer form of strcpy().

<!-- END CATEGORY DOCUMENTATION -->

## Functions

<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
<!-- BEGIN CATEGORY LIST: CategoryStdinc, CategoryAPIFunction -->
- [SDL_abs](SDL_abs)
- [SDL_acos](SDL_acos)
- [SDL_acosf](SDL_acosf)
- [SDL_aligned_alloc](SDL_aligned_alloc)
- [SDL_aligned_free](SDL_aligned_free)
- [SDL_asin](SDL_asin)
- [SDL_asinf](SDL_asinf)
- [SDL_asprintf](SDL_asprintf)
- [SDL_atan](SDL_atan)
- [SDL_atan2](SDL_atan2)
- [SDL_atan2f](SDL_atan2f)
- [SDL_atanf](SDL_atanf)
- [SDL_atof](SDL_atof)
- [SDL_atoi](SDL_atoi)
- [SDL_bsearch](SDL_bsearch)
- [SDL_bsearch_r](SDL_bsearch_r)
- [SDL_calloc](SDL_calloc)
- [SDL_ceil](SDL_ceil)
- [SDL_ceilf](SDL_ceilf)
- [SDL_copysign](SDL_copysign)
- [SDL_copysignf](SDL_copysignf)
- [SDL_cos](SDL_cos)
- [SDL_cosf](SDL_cosf)
- [SDL_crc16](SDL_crc16)
- [SDL_crc32](SDL_crc32)
- [SDL_CreateEnvironment](SDL_CreateEnvironment)
- [SDL_DestroyEnvironment](SDL_DestroyEnvironment)
- [SDL_exp](SDL_exp)
- [SDL_expf](SDL_expf)
- [SDL_fabs](SDL_fabs)
- [SDL_fabsf](SDL_fabsf)
- [SDL_floor](SDL_floor)
- [SDL_floorf](SDL_floorf)
- [SDL_fmod](SDL_fmod)
- [SDL_fmodf](SDL_fmodf)
- [SDL_free](SDL_free)
- [SDL_getenv](SDL_getenv)
- [SDL_getenv_unsafe](SDL_getenv_unsafe)
- [SDL_GetEnvironment](SDL_GetEnvironment)
- [SDL_GetEnvironmentVariable](SDL_GetEnvironmentVariable)
- [SDL_GetEnvironmentVariables](SDL_GetEnvironmentVariables)
- [SDL_GetMemoryFunctions](SDL_GetMemoryFunctions)
- [SDL_GetNumAllocations](SDL_GetNumAllocations)
- [SDL_GetOriginalMemoryFunctions](SDL_GetOriginalMemoryFunctions)
- [SDL_iconv](SDL_iconv)
- [SDL_iconv_close](SDL_iconv_close)
- [SDL_iconv_open](SDL_iconv_open)
- [SDL_iconv_string](SDL_iconv_string)
- [SDL_isalnum](SDL_isalnum)
- [SDL_isalpha](SDL_isalpha)
- [SDL_isblank](SDL_isblank)
- [SDL_iscntrl](SDL_iscntrl)
- [SDL_isdigit](SDL_isdigit)
- [SDL_isgraph](SDL_isgraph)
- [SDL_isinf](SDL_isinf)
- [SDL_isinff](SDL_isinff)
- [SDL_islower](SDL_islower)
- [SDL_isnan](SDL_isnan)
- [SDL_isnanf](SDL_isnanf)
- [SDL_isprint](SDL_isprint)
- [SDL_ispunct](SDL_ispunct)
- [SDL_isspace](SDL_isspace)
- [SDL_isupper](SDL_isupper)
- [SDL_isxdigit](SDL_isxdigit)
- [SDL_itoa](SDL_itoa)
- [SDL_lltoa](SDL_lltoa)
- [SDL_log](SDL_log)
- [SDL_log10](SDL_log10)
- [SDL_log10f](SDL_log10f)
- [SDL_logf](SDL_logf)
- [SDL_lround](SDL_lround)
- [SDL_lroundf](SDL_lroundf)
- [SDL_ltoa](SDL_ltoa)
- [SDL_malloc](SDL_malloc)
- [SDL_memcmp](SDL_memcmp)
- [SDL_memcpy](SDL_memcpy)
- [SDL_memmove](SDL_memmove)
- [SDL_memset](SDL_memset)
- [SDL_memset4](SDL_memset4)
- [SDL_modf](SDL_modf)
- [SDL_modff](SDL_modff)
- [SDL_murmur3_32](SDL_murmur3_32)
- [SDL_pow](SDL_pow)
- [SDL_powf](SDL_powf)
- [SDL_qsort](SDL_qsort)
- [SDL_qsort_r](SDL_qsort_r)
- [SDL_rand](SDL_rand)
- [SDL_rand_bits](SDL_rand_bits)
- [SDL_rand_bits_r](SDL_rand_bits_r)
- [SDL_rand_r](SDL_rand_r)
- [SDL_randf](SDL_randf)
- [SDL_randf_r](SDL_randf_r)
- [SDL_realloc](SDL_realloc)
- [SDL_round](SDL_round)
- [SDL_roundf](SDL_roundf)
- [SDL_scalbn](SDL_scalbn)
- [SDL_scalbnf](SDL_scalbnf)
- [SDL_setenv_unsafe](SDL_setenv_unsafe)
- [SDL_SetEnvironmentVariable](SDL_SetEnvironmentVariable)
- [SDL_SetMemoryFunctions](SDL_SetMemoryFunctions)
- [SDL_sin](SDL_sin)
- [SDL_sinf](SDL_sinf)
- [SDL_size_add_check_overflow](SDL_size_add_check_overflow)
- [SDL_size_mul_check_overflow](SDL_size_mul_check_overflow)
- [SDL_snprintf](SDL_snprintf)
- [SDL_sqrt](SDL_sqrt)
- [SDL_sqrtf](SDL_sqrtf)
- [SDL_srand](SDL_srand)
- [SDL_sscanf](SDL_sscanf)
- [SDL_StepBackUTF8](SDL_StepBackUTF8)
- [SDL_StepUTF8](SDL_StepUTF8)
- [SDL_strcasecmp](SDL_strcasecmp)
- [SDL_strcasestr](SDL_strcasestr)
- [SDL_strchr](SDL_strchr)
- [SDL_strcmp](SDL_strcmp)
- [SDL_strdup](SDL_strdup)
- [SDL_strlcat](SDL_strlcat)
- [SDL_strlcpy](SDL_strlcpy)
- [SDL_strlen](SDL_strlen)
- [SDL_strlwr](SDL_strlwr)
- [SDL_strncasecmp](SDL_strncasecmp)
- [SDL_strncmp](SDL_strncmp)
- [SDL_strndup](SDL_strndup)
- [SDL_strnlen](SDL_strnlen)
- [SDL_strnstr](SDL_strnstr)
- [SDL_strpbrk](SDL_strpbrk)
- [SDL_strrchr](SDL_strrchr)
- [SDL_strrev](SDL_strrev)
- [SDL_strstr](SDL_strstr)
- [SDL_strtod](SDL_strtod)
- [SDL_strtok_r](SDL_strtok_r)
- [SDL_strtol](SDL_strtol)
- [SDL_strtoll](SDL_strtoll)
- [SDL_strtoul](SDL_strtoul)
- [SDL_strtoull](SDL_strtoull)
- [SDL_strupr](SDL_strupr)
- [SDL_swprintf](SDL_swprintf)
- [SDL_tan](SDL_tan)
- [SDL_tanf](SDL_tanf)
- [SDL_tolower](SDL_tolower)
- [SDL_toupper](SDL_toupper)
- [SDL_trunc](SDL_trunc)
- [SDL_truncf](SDL_truncf)
- [SDL_UCS4ToUTF8](SDL_UCS4ToUTF8)
- [SDL_uitoa](SDL_uitoa)
- [SDL_ulltoa](SDL_ulltoa)
- [SDL_ultoa](SDL_ultoa)
- [SDL_unsetenv_unsafe](SDL_unsetenv_unsafe)
- [SDL_UnsetEnvironmentVariable](SDL_UnsetEnvironmentVariable)
- [SDL_utf8strlcpy](SDL_utf8strlcpy)
- [SDL_utf8strlen](SDL_utf8strlen)
- [SDL_utf8strnlen](SDL_utf8strnlen)
- [SDL_vasprintf](SDL_vasprintf)
- [SDL_vsnprintf](SDL_vsnprintf)
- [SDL_vsscanf](SDL_vsscanf)
- [SDL_vswprintf](SDL_vswprintf)
- [SDL_wcscasecmp](SDL_wcscasecmp)
- [SDL_wcscmp](SDL_wcscmp)
- [SDL_wcsdup](SDL_wcsdup)
- [SDL_wcslcat](SDL_wcslcat)
- [SDL_wcslcpy](SDL_wcslcpy)
- [SDL_wcslen](SDL_wcslen)
- [SDL_wcsncasecmp](SDL_wcsncasecmp)
- [SDL_wcsncmp](SDL_wcsncmp)
- [SDL_wcsnlen](SDL_wcsnlen)
- [SDL_wcsnstr](SDL_wcsnstr)
- [SDL_wcsstr](SDL_wcsstr)
- [SDL_wcstol](SDL_wcstol)
<!-- END CATEGORY LIST -->

## Datatypes

<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
<!-- BEGIN CATEGORY LIST: CategoryStdinc, CategoryAPIDatatype -->
- [SDL_calloc_func](SDL_calloc_func)
- [SDL_CompareCallback](SDL_CompareCallback)
- [SDL_CompareCallback_r](SDL_CompareCallback_r)
- [SDL_Environment](SDL_Environment)
- [SDL_free_func](SDL_free_func)
- [SDL_FunctionPointer](SDL_FunctionPointer)
- [SDL_iconv_t](SDL_iconv_t)
- [SDL_malloc_func](SDL_malloc_func)
- [SDL_realloc_func](SDL_realloc_func)
- [SDL_Time](SDL_Time)
- [Sint16](Sint16)
- [Sint32](Sint32)
- [Sint64](Sint64)
- [Sint8](Sint8)
- [Uint16](Uint16)
- [Uint32](Uint32)
- [Uint64](Uint64)
- [Uint8](Uint8)
<!-- END CATEGORY LIST -->

## Structs

<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
<!-- BEGIN CATEGORY LIST: CategoryStdinc, CategoryAPIStruct -->
- (none.)
<!-- END CATEGORY LIST -->

## Enums

<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
<!-- BEGIN CATEGORY LIST: CategoryStdinc, CategoryAPIEnum -->
- (none.)
<!-- END CATEGORY LIST -->

## Macros

<!-- DO NOT HAND-EDIT CATEGORY LISTS, THEY ARE AUTOGENERATED AND WILL BE OVERWRITTEN, BASED ON TAGS IN INDIVIDUAL PAGE FOOTERS. EDIT THOSE INSTEAD. -->
<!-- BEGIN CATEGORY LIST: CategoryStdinc, CategoryAPIMacro -->
- [SDL_arraysize](SDL_arraysize)
- [SDL_clamp](SDL_clamp)
- [SDL_COMPILE_TIME_ASSERT](SDL_COMPILE_TIME_ASSERT)
- [SDL_const_cast](SDL_const_cast)
- [SDL_copyp](SDL_copyp)
- [SDL_FLT_EPSILON](SDL_FLT_EPSILON)
- [SDL_FOURCC](SDL_FOURCC)
- [SDL_iconv_utf8_locale](SDL_iconv_utf8_locale)
- [SDL_iconv_utf8_ucs2](SDL_iconv_utf8_ucs2)
- [SDL_iconv_utf8_ucs4](SDL_iconv_utf8_ucs4)
- [SDL_iconv_wchar_utf8](SDL_iconv_wchar_utf8)
- [SDL_IN_BYTECAP](SDL_IN_BYTECAP)
- [SDL_INIT_INTERFACE](SDL_INIT_INTERFACE)
- [SDL_INOUT_Z_CAP](SDL_INOUT_Z_CAP)
- [SDL_INVALID_UNICODE_CODEPOINT](SDL_INVALID_UNICODE_CODEPOINT)
- [SDL_max](SDL_max)
- [SDL_min](SDL_min)
- [SDL_NOLONGLONG](SDL_NOLONGLONG)
- [SDL_OUT_BYTECAP](SDL_OUT_BYTECAP)
- [SDL_OUT_CAP](SDL_OUT_CAP)
- [SDL_OUT_Z_BYTECAP](SDL_OUT_Z_BYTECAP)
- [SDL_OUT_Z_CAP](SDL_OUT_Z_CAP)
- [SDL_PI_D](SDL_PI_D)
- [SDL_PI_F](SDL_PI_F)
- [SDL_PRILL_PREFIX](SDL_PRILL_PREFIX)
- [SDL_PRILLd](SDL_PRILLd)
- [SDL_PRILLu](SDL_PRILLu)
- [SDL_PRILLX](SDL_PRILLX)
- [SDL_PRILLx](SDL_PRILLx)
- [SDL_PRINTF_FORMAT_STRING](SDL_PRINTF_FORMAT_STRING)
- [SDL_PRINTF_VARARG_FUNC](SDL_PRINTF_VARARG_FUNC)
- [SDL_PRINTF_VARARG_FUNCV](SDL_PRINTF_VARARG_FUNCV)
- [SDL_PRIs32](SDL_PRIs32)
- [SDL_PRIs64](SDL_PRIs64)
- [SDL_PRIu32](SDL_PRIu32)
- [SDL_PRIu64](SDL_PRIu64)
- [SDL_PRIX32](SDL_PRIX32)
- [SDL_PRIx32](SDL_PRIx32)
- [SDL_PRIx64](SDL_PRIx64)
- [SDL_PRIX64](SDL_PRIX64)
- [SDL_reinterpret_cast](SDL_reinterpret_cast)
- [SDL_SCANF_FORMAT_STRING](SDL_SCANF_FORMAT_STRING)
- [SDL_SCANF_VARARG_FUNC](SDL_SCANF_VARARG_FUNC)
- [SDL_SCANF_VARARG_FUNCV](SDL_SCANF_VARARG_FUNCV)
- [SDL_SINT64_C](SDL_SINT64_C)
- [SDL_SIZE_MAX](SDL_SIZE_MAX)
- [SDL_stack_alloc](SDL_stack_alloc)
- [SDL_static_cast](SDL_static_cast)
- [SDL_STRINGIFY_ARG](SDL_STRINGIFY_ARG)
- [SDL_UINT64_C](SDL_UINT64_C)
- [SDL_WPRINTF_VARARG_FUNC](SDL_WPRINTF_VARARG_FUNC)
- [SDL_WPRINTF_VARARG_FUNCV](SDL_WPRINTF_VARARG_FUNCV)
- [SDL_zero](SDL_zero)
- [SDL_zeroa](SDL_zeroa)
- [SDL_zerop](SDL_zerop)
<!-- END CATEGORY LIST -->


----
[CategoryAPICategory](CategoryAPICategory)