⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wcsrtombs.c

📁 Newlib 嵌入式 C库 标准实现代码
💻 C
字号:
#include <reent.h>#include <newlib.h>#include <wchar.h>#include <stdlib.h>#include <stdio.h>#include <errno.h>size_t_DEFUN (_wcsrtombs_r, (r, dst, src, len, ps),	struct _reent *r _AND	char *dst _AND	const wchar_t **src _AND	size_t len _AND	mbstate_t *ps){  char *ptr = dst;  char buff[10];  wchar_t *pwcs;  size_t n;  int i;#ifdef _MB_CAPABLE  if (ps == NULL)    {      _REENT_CHECK_MISC(r);      ps = &(_REENT_WCSRTOMBS_STATE(r));    }#endif  /* If no dst pointer, treat len as maximum possible value. */  if (dst == NULL)    len = (size_t)-1;  n = 0;  pwcs = (wchar_t *)(*src);  while (n < len)    {      int count = ps->__count;      wint_t wch = ps->__value.__wch;      int bytes = _wcrtomb_r (r, buff, *pwcs, ps);      if (bytes == -1)	{	  r->_errno = EILSEQ;	  ps->__count = 0;	  return (size_t)-1;	}      if (n <= len - bytes && bytes < len)	{          n += bytes;	  if (dst)	    {	      for (i = 0; i < bytes; ++i)	        *ptr++ = buff[i];	      ++(*src);	    }	  if (*pwcs++ == 0x00)	    {	      if (dst)	        *src = NULL;	      ps->__count = 0;	      return n - 1;	    }	}      else	{	  /* not enough room, we must back up state to before _wctomb_r call */	  ps->__count = count;	  ps->__value.__wch = wch;          len = 0;	}    }  return n;} #ifndef _REENT_ONLYsize_t_DEFUN (wcsrtombs, (dst, src, len, ps),	char *dst _AND	const wchar_t **src _AND	size_t len _AND	mbstate_t *ps){  return _wcsrtombs_r (_REENT, dst, src, len, ps);}#endif /* !_REENT_ONLY */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -