#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 가변 길이 인수 목록 "The C Programming Language 2nd Edition"의이 코드에는 버그가 있습니까?
에서이다 일반적으로이 프로그램을 출력 AAAAAAA 및 정지해야하지만 대신이 AAAAAAA의 DDDD를 인쇄합니다. http://ideone.com/d3Akk정말 버그입니까?
감사합니다.
당신의 문제는 당신이 K & R에서 코드를 가져 와서 iso 환경에서 실행하려고한다는 사실과 거의 관련이 있습니다. – Marcin
버그에 대한 정의는 다음과 같습니다 : 예상대로 작동하지 않으면 버그입니다. – nmagerko
왜 K & R은'aaaaaaa '를 출력해야한다고 생각합니까? 텍스트에 그 설명이 포함되어 있습니까? –