2010-02-24 19 views

Respuesta

11

El modificador a a scanf no funcionará si está compilando con la bandera -std=c99; asegúrate de no estar usando eso.

Si tiene al menos la versión 2.7 de glibc, puede y debe usar el modificador m en lugar de a.

Además, es su responsabilidad liberar el búfer.

+0

que compila con '-ansi' o '--std = c98' funciona con scanf ("% como"). –

+2

Algunos antecedentes sobre la bandera 'm', ya que los documentos GCC/glibc no lo mencionan: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

Para usar' un modificador ', pasa -D_GNU_SOURCE a gcc, pero por supuesto mejor usa' m'. – amc

0

que he tenido una experiencia limitada con GCC, pero nunca he visto un modificador de %ascanf. ¿Has intentado reemplazar el %a con %s en la tercera línea que proporcionaste?

+0

Consulte el enlace proporcionado. FYI% c almacena solo 1 char. Estoy intentando asignar dinámicamente memoria para almacenar una cadena completa de caracteres 0-9a-zA-z. –

+0

Sé lo que '% c' hace - Me perdí ese bit. ¿Qué sucede cuando usas '% s' en lugar de'% a'? –

+2

% s funcionará si ya tiene memoria asignada. mientras que% as (con un indicador) asigna memoria requerida a * variable que luego puede liberarse() –

1

¿Tiene extensiones de GNU habilitadas? El estándar C no tiene el modificador a en absoluto.

0

'Dynamic String Input' con scanf("%as") funcionará si está habilitado el indicador -ansi o -std=c89.
Compilar utilizando gcc -ansi

o bien puede utilizar scanf("%ms")