读书人

自己实现一个sprintf结果win得不到正

发布时间: 2013-02-27 10:48:11 作者: rapoo

自己实现一个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;
}

请各位大侠分析下原因 c
[解决办法]
具体为什么我还没不知道!
不过
va_start(ap, pFmt);

改为
va_start(ap, fmt);
就可以了
我觉可以是宏的问题!
va_start是一个宏不是函数,所以看的不是地址!
va_start是说ap从fmt这个参数后开始算不定参!
pFmt它就看不懂了!Linux为什么可以我就不知道了!我只用Windows!

希望对你有用!!!!!

读书人网 >C语言

热点推荐