自己实现一个sprintf,结果win得不到正确结果,linux上倒可以
代码如下:
#include <stdio.h>
#include <stdarg.h>
int mysprintf(char *szBuff, char *fmt, ...);
int main(int argc, char *argv[])
{
char buffer[64] = {0};
int num = 10;
mysprintf(buffer, "%d, %s\n", num, "hello world");
printf(buffer);
return 0;
}
int mysprintf(char *szBuff, char *fmt, ...)
{
va_list ap = NULL;
char *pFmt = fmt;
char *pBuff = szBuff;
va_start(ap, pFmt);
while (*pFmt != NULL)
{
if (*pFmt != '%')
{
*pBuff++ = *pFmt++;
}
else
{
int swNum = 0;
char numBuff[64] = {0};
char *szStr = NULL;
pFmt++;
switch(*pFmt++)
{
case 'd':
swNum = va_arg(ap, int);
itoa(swNum, numBuff, 10);
strcpy(pBuff, numBuff);
pBuff += strlen(numBuff);
break;
case 's':
szStr = va_arg(ap, char *);
strcpy(pBuff, szStr);
pBuff += strlen(szStr);
break;
default:
printf("invalid format\n");
break;
}
}
}
va_end(ap);
return 0;
}