0

だから私は自分のprintf関数を書いているので、stdarg.hとシステムコールwrite()を使っています。しかし、%pを関数に誤って挿入する方法がわかりません。%Xは同じ結果を生成しますか?

私は%xをそのように行いました:

'x': x=va_arg(argp,argp, unsigned int); 
     char *temp = convert(x,16);
     write(1, temp, lengthOFtemp);
     break;

char *convert(unsigned int, int)
{
static char buf[33];
char *ptr;

ptr=&buf[sizeof(buff)-1];
*ptr='\0';
do
{
*--ptr="0123456789abcdef"[num%base];
num/=base;
}while(num!=0);

return(ptr);
}
4

2 に答える 2

0

%pと%Xの違いは、ポインタサイズがプラットフォーム固有であるということです。64ビットプラットフォームでは8バイト、32ビットプラットフォームでは4バイトです。したがって、一部の64ビットプラットフォームで4バイトのままである「unsignedint」ではなく、「unsignedlong」変数を使用してva_argsからのポインタ引数を処理する必要があります。

それ以外の場合は、上記の%Xコードと非常によく似ています。

于 2013-02-13T04:45:11.210 に答える