我想C++编写自己的printf FUNC键实践的研究,但我得到以下运行时错误,我想不通为什么:自己的printf函数不起作用
Access violation reading location 0x33333333.
下面的代码:
void myPrintf(char* szStr, ...)
{
va_list marker;
va_start(marker, szStr);
va_arg(marker, char*);
char opCode;
int nLen = istrlen(szStr);
for (int i = 0; i < nLen; i++)
{
if (szStr[i] != '%')
cout << szStr[i];
else
{
if (i + 1 < nLen)
{
opCode = szStr[i + 1];
switch (opCode)
{
case 'd':
cout << va_arg(marker, int);
i += 2;
break;
case 'f':
cout << va_arg(marker, float);
i += 2;
break;
case 's':
cout << va_arg(marker, char*);
i += 2;
break;
default:
cout << '%';
break;
}
}
else
cout << '%';
}
}
cout << endl;
}
我想不通为什么会这样, 可能有人请告诉我,我做了什么错?
我打电话用下面的代码功能:
myPrintf("%d %s %f", 5, "test", 10.1);
当程序粉碎它表明我这个代码:
static size_t __CLRCALL_OR_CDECL length(const _Elem *_First)
{ // find length of null-terminated string
return (*_First == 0 ? 0
: _CSTD strlen(_First));
}
所以在调试器,在那里它会崩溃(同样
short
参数均作为int
,等等......通过)?你用什么代码调用你的函数? – lordjeb 2014-09-24 16:06:21@lordjeb编辑OP – 2014-09-24 16:09:54
是的,但它在哪里崩溃?使用调试器进行调试。 – 2014-09-24 16:12:05