9

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

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

4 回答 4

10

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

如果您至少有 2.7 版的 glibc,则可以并且应该使用m修饰符代替a.

此外,释放缓冲区是您的责任。

于 2010-02-24T22:28:28.523 回答
1

您是否启用了 GNU 扩展?标准 C 根本没有a修饰符。

于 2010-02-24T22:03:07.567 回答
1

如果启用了or标志,“动态字符串输入”scanf("%as")将起作用。 编译使用-ansi-std=c89
gcc -ansi

否则你可以使用scanf("%ms")

于 2010-02-24T22:26:13.817 回答
0

我在 GCC 方面的经验有限,但我从未%a见过scanf. 您是否尝试过在您提供的第三行中替换%a%s

于 2010-02-24T22:02:45.383 回答