Семейство scanf. Баг libc или нет? - C (СИ)
Формулировка задачи:
Начнем с примера:Сборка:Подадим на вход строкуПолучим на выходе:Версия 4.8.1.
Вопрос, почему оно работает? Ведь по стандарту (6.4.4.2) то, что мы ввели не является действительной константой. Вдобавок, в разделе про fscanf (7.19.6.2 п. 19, 20) четко указано, что в данном случае функция должна была вернуть ноль.
ЗЫ, видел в багзилле аналогичный баг на glibc, но там вообще неясно чем кончилось.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int count = 0;
float f = 0.0f;
count = scanf("%f", &f);
printf("Value = %f, count = %d\n", f, count);
getchar();
return 0;
}CC=gcc CFLAGS=-c -std=c89 -Wall -Wextra all: test.exe test.exe: main.o $(CC) main.o -o $@ main.o: main.c $(CC) $(CFLAGS) main.c -o $@
3e
Value = 3.0000, count = 1
ЗЫЫ, что забавно, сильно мной нелюбимый xlc ведет себя как надо (т.е. 0.0 и 0 на stdout).
Решение задачи: «Семейство scanf. Баг libc или нет?»
textual
Листинг программы
% tcc -run test.c 12zzzz Value = 12.000000, count = 1