2010-02-24 3 views

ответ

11

a модификатор зсапЕ не будет работать, если вы компилируете с -std=c99 флагом; убедитесь, что вы не используете это.

Если у вас есть хотя бы версия 2.7 glibc, вы можете и должны использовать модификатор m вместо a.

Кроме того, вы несете ответственность за освобождение буфера.

+0

компиляция с '-ansi' или '-std = c98' работает с scanf ("% as"). –

+2

Некоторые фон на флагов 'm', так как документы GCC/glibc не упоминают об этом: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

Чтобы использовать' a', передать -D_GNU_SOURCE в gcc, но, конечно, лучше использовать 'm'. – amc

0

Я имел ограниченный опыт работы с GCC, но я никогда не видел модификатор %a для scanf. Вы пробовали заменить %a на %s в третьей строке, которую вы указали?

+0

Обратитесь к приведенной ссылке. FYI% c хранит только 1 символ. Я пытаюсь динамически выделить память для хранения полной строки символов 0-9a-zA-z. –

+0

Я знаю, что '% c' делает - я просто пропустил этот бит. Что происходит, когда вы используете '% s' вместо'% a'? –

+2

% s будет работать, если вы уже выделили память. тогда как% as (с флагом) выделяет необходимую память самому * переменной, которая позже может быть освобождена() –

1

У вас есть расширения GNU? Стандарт C не имеет модификатора a.

0

«Динамический входной сигнал строки» с scanf("%as") будет работать, если включен флагили -std=c89.
Compile используя gcc -ansi

Или же вы можете использовать scanf("%ms")