#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void minprintf(char *fmt, ...)
{
va_list ap;
char *p, *sval;
int ival;
double dval;
va_start(ap, fmt);
for (p = fmt; *p; p++) {
if (*p != '%') {
putchar(*p);
continue;
}
switch (*p++) {
case 'd':
ival = va_arg(ap, int);
printf("%d", ival);
break;
case 'f':
dval = va_arg(ap, double);
printf("%f", dval);
break;
case 's':
for (sval = va_arg(ap, char *); *sval; sval++)
putchar(*sval);
break;
default:
putchar(*p);
break;
}
}
va_end(ap);
}
int main(void)
{
minprintf("aaaaaaa%\0dddd");
return 0;
}
此代碼是從C編程語言第二版 7.3可變長度參數列表「C編程語言第二版」中的代碼是否包含錯誤?
通常這個程序應該輸出AAAAAAA和停止,而是它將打印AAAAAAA DDDD。 http://ideone.com/d3Akk
這真的是一個錯誤。
謝謝。
你的問題幾乎肯定與你從K&R獲取代碼並嘗試在iso環境中運行它有關。 – Marcin 2012-01-02 18:58:53
我相信一個bug的定義是這樣的:如果它沒有按預期工作,那就是一個bug。 – nmagerko 2012-01-02 18:59:01
爲什麼K&R認爲它應該輸出'aaaaaaa'?文本是否包含對此的任何解釋? – 2012-01-02 19:11:31