【发布时间】:2011-05-25 00:19:28
【问题描述】:
我对 C 中可变长度参数的函数有以下疑问:
案例1(作品)
myPrintf("%d %s", 24, "Hi There");
案例2(作品)
char tempbuf[9]="Hi There";`
myPrintf("%s %d", tempbuf, 24)
案例 3(不起作用)
myPrintf("%s %d", "Hi There", 24)
有没有人知道为什么案例 3 不起作用。对于这种情况,我可以看到 str = va_arg(ap, char *); 返回 24 而不是实际字符串。
myPrintf 的代码: (虽然功能不全)
void myPrintf(char *fmt, ...)
{
int i,j,val,len;
char *str;
int len2;
va_list ap;
char tempBuf[128];
len=strlen(fmt);
memset(tempBuf,0,MAX_MSZ_LEN);
va_start(ap,fmt);
for(i=0; i<len; i++)
{
switch(fmt[i])
{
case '%' :
i++;
if( fmt[i] == 's' )
{
str = va_arg(ap, char *);
strcat(tempBuf, str);
}
else
if( fmt[i]=='i' || fmt[i]=='d' )
{
val=va_arg(ap,int);
sprintf(str,"%d",val);
strcat(tempBuf, str);
}
default :
len2=strlen(tempBuf);
tempBuf[len2]=fmt[i];
}
}
va_end(ap);
}
}
【问题讨论】:
-
myPrintf()的代码是什么? -
我们需要查看
myPrintf的代码才能提供很多帮助 - 到目前为止,它看起来像是一个合理的代码片段。 -
你有myprintf的代码吗?
-
myPrintf和myprintf之间有什么区别? -
你确定在case 3格式字符串后面有逗号吗?
标签: c