我正在尝试使用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
}
答案 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")