动态字符串输入 - 使用scanf("%as")

N 1*_*1.1 9 c scanf

我正在尝试使用GCC手册中指定的动态读取输入scanf和存储,但它给出了编译时错误.char *

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

Nie*_*jou 11

如果使用标志进行编译,则scanfa修饰符将不起作用; 确保你没有使用它.-std=c99

如果你的glibc版本至少为2.7,你可以而且应该使用m修饰符来代替a.

此外,您有责任释放缓冲区.

  • 关于`m`标志的一些背景,因为GCC/glibc文档没有提到它:http://gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html (2认同)