Динамический ввод строки - используя scanf ("% as") - PullRequest
9 голосов
/ 25 февраля 2010

Я пытаюсь прочитать ввод с помощью scanf и сохранить в char * динамически, как указано в руководстве GCC , но это дает ошибку времени компиляции.

  char *string;
  if (scanf ("%as",&string) != 1){
    //some code
  }
  else{
   printf("%s\n", *string);
   free(string);
   //some code
  }

Ответы [ 4 ]

11 голосов
/ 25 февраля 2010

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

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

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

1 голос
/ 25 февраля 2010

У вас включены расширения GNU? Стандарт C вообще не имеет модификатора a.

0 голосов
/ 25 февраля 2010

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

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

0 голосов
/ 25 февраля 2010

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

...