我目前正在開發自己的scanf函數實現,但我無法使用除va_宏之外的任何庫函數。與myPrintf和va_arg列表卡在一起
一切都非常作品除了印刷的東西,是在* FMT變量,而不是一個%d,%S等
例如myPrintf( 「%d的東西,更多的東西%的」,50, 「foo」 的);
只打印50foo,而不是50的東西,更多的東西富
我試着用馬桶蓋的默認部分瞎搞,但它使我沒有什麼 預先感謝您!
void myPrintf(char *fmt, ...)
{
va_list ap;
char *s;
char buf[64];
va_start(ap, fmt);
while(*fmt)
{
x++;
switch(*fmt++)
{
case 's':
s = va_arg(ap, char*);
write(1,s,strlen(s));
break;
case 'd':
s = toString(va_arg(ap, int));
write(1,s,strlen(s));
break;
case 'b':
s = toBin(va_arg(ap, int));
write(1,s,strlen(s));
break;
default:
break;
}
va_end(ap);
}
}
提示:您的代碼從不檢查格式轉換字符'%',那麼您的代碼如何知道它是解析格式說明符還是字符串中的普通字符? – FatalError 2014-12-02 23:03:20
@FatalError好點,但仍然有點困惑如何做到這一點 – tomiQrsd 2014-12-02 23:16:48
基本上,你需要知道前一個字符是否是'%'。最簡單的方法是保留一個布爾值,當前一個字符爲'%'時爲true。如果是這樣,開始分析格式說明符。否則,它只是一個普通的字符,你應該從字面上處理它。 – FatalError 2014-12-02 23:18:33