任何人都有参考va_listx86_64 ABI(在Linux上使用的那个)的表示?我正在尝试调试一些代码,其中堆栈或参数似乎已损坏,这将真正有助于理解我应该看到的内容......
我想知道具体printf("%d",x)是如何解释的。我只知道编译器保留一个内存来放置'%', '%d','\0'并将其地址返回到,然后根据我们指定的格式说明符printf打印第二个参数。x
那么,如果我使用 example int x=5; char *p="%d"; printf(p,x),它与 是一样的吗printf("%d",x)?
如果想在C中编写一个函数,将一个变量参数列表传递给printf一个必须使用该vprintf版本的函数.如何为自定义函数实现此机制?
换句话说,如何是什么套的精髓vprintf除了printf在符合标准的C语言实现?
我已经使用了以下功能很长一段时间了:
void AddRow(int iNumOfColumns,...)
{
int* pValuePerColumn = (int*)&iNumOfColumns+1;
for (int i=0; i<iNumOfColumns; i++)
{
// Do something with pValuePerColumn[i]
}
}
Run Code Online (Sandbox Code Playgroud)
现在事实证明它在Win64上为我们的一个客户崩溃了.
我手头没有64位平台,但我假设原因是:
调用该函数时,参数将作为64位值推入堆栈.
在这个假设下,我认为,更换int*与size_t*应解决的问题.
我的问题是: