2010-02-24 7 views

답변

11

a 수정 scanf와 에 작동하지 않습니다 사용할 수 있습니다; 당신이 그것을 사용하고 있지 않은지 확인하십시오.

glibc 버전 2.7 이상인 경우 a 대신 m 수정자를 사용할 수 있고 사용해야합니다.

또한 버퍼를 비울 필요가 있습니다.

+0

'-ansi'또는 '--std = c98'로 컴파일하는 것은 scanf ("% as")와 함께 작동합니다. –

+2

GCC/glibc 문서에 언급되지 않았기 때문에'm' 플래그의 배경 정보 : http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html –

+1

' a'한정자는 gcc에 -D_GNU_SOURCE를 전달하지만 물론'm'을 사용하는 것이 더 좋습니다. – amc

0

나는 GCC 제한된 경험했지만, 나는 scanf에 대한 %a 수정을 본 적이 없습니다. 입력하신 세 번째 줄에 %a%s으로 대체 해 보셨습니까?

+0

제공된 링크를 참조하십시오. FYI % c는 1 개의 문자 만 저장합니다. 0-9a-zA-z 문자의 전체 문자열을 저장하기 위해 동적으로 메모리를 할당하려고합니다. –

+0

'% c'이 무엇을하는지 압니다 - 방금 그 비트를 놓쳤습니다. '% a' 대신에'% s'을 사용하면 어떻게됩니까? –

+2

%는 이미 메모리를 할당 한 경우 작동합니다. % as (플래그 포함)는 필요한 메모리 자체를 * 변수로 할당하고 나중에 해제 할 수 있습니다. –

1

GNU 확장 기능을 사용할 수 있습니까? 표준 C에는 a 수정자가 전혀 없습니다.

0

scanf("%as")이 포함 된 '동적 문자열 입력'은 -ansi 또는 -std=c89 플래그가 사용되는 경우 작동합니다.
컴파일 gcc -ansi

를 사용하여 아니면 당신은 당신이 -std=c99 플래그를 사용하여 컴파일하는 경우 scanf("%ms")