2010-02-24 6 views

Antwort

11

Der a Modifikator Scanf nicht verwenden funktionieren, wenn Sie mit dem -std=c99 Flag kompilieren; stellen Sie sicher, dass Sie das nicht verwenden.

Wenn Sie mindestens glibc Version 2.7 haben, können und sollten Sie den Modifikator m anstelle von a verwenden.

Auch ist es Ihre Verantwortung, den Puffer freizugeben.

+0

Kompilieren mit '-ansi' oder '-std = c98' funktioniert mit scanf ("% as"). –

+2

Etwas Hintergrund auf der 'm' Flagge, da die GCC/glibc Dokumente es nicht erwähnen: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

Um die' a' Modifizierer, pass-D_GNU_SOURCE zu gcc, aber nimm natürlich besser 'm'. – amc

0

Ich habe nur begrenzte Erfahrungen mit GCC gehabt, aber ich habe noch nie einen %a Modifikator für scanf gesehen. Haben Sie versucht, die %a durch %s in der von Ihnen bereitgestellten dritten Zeile zu ersetzen?

+0

Bitte beachten Sie den angegebenen Link. FYI% c speichert nur 1 Zeichen. Ich versuche, Speicher dynamisch zuzuweisen, um eine vollständige Zeichenfolge von 0-9a-zA-z-Zeichen zu speichern. –

+0

Ich weiß, was '% c' macht - ich habe das bisschen verpasst. Was passiert, wenn Sie '% s' anstelle von'% a' verwenden? –

+2

% s funktioniert, wenn Sie bereits Speicher zugewiesen haben. wobei% as (mit einem Flag) den benötigten Speicher selbst zu * Variable zuweist, die später freigegeben werden kann() –

1

Haben Sie GNU-Erweiterungen aktiviert? Standard C hat keinen a Modifikator überhaupt.

0

'Dynamische String-Eingabe' mit scanf("%as") funktioniert, wenn das Flag -ansi oder -std=c89 aktiviert ist.
Compile mit gcc -ansi

Oder sonst können Sie scanf("%ms")