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

时间:2010-02-24 21:57:19

标签: c scanf

我正在尝试使用scanf读取输入并存储到char * dynamically as specified by GCC manual,但它会产生编译时错误。

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

4 个答案:

答案 0 :(得分:11)

如果使用a标志进行编译, scanf -std=c99修饰符将无效;确保你没有使用它。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我对GCC的经验有限,但我从未见过%a的{​​{1}}修饰符。您是否尝试将scanf替换为您提供的第三行中的%a

答案 3 :(得分:0)

如果scanf("%as")-ansi标志已启用,

'带有-std=c89的“动态字符串输入”将起作用。
使用gcc -ansi

进行编译

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