由于某种原因,以下代码会输出 (null):
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *foo;
scanf("%ms", &foo);
printf("%s", foo);
free(foo);
}
我试图动态分配一个字符串的内存,但正如我之前所说,我的程序只会输出(null)。我通过使用getche和realloc创建了一个函数来解决此问题,但似乎这几乎是毫无意义的,因为我还必须编写如果用户输入退格、制表符等将发生什么的程序...但正如我所说,这只是一个变通方法,我更想知道为什么上面的代码不起作用...附加信息:
我正在使用Pelles C IDE v7.00,并使用C11标准进行编译。
scanf
文档中没有看到这个。 - Greg Hewgillm
标志的任何信息(尽管它是草案)。你从哪里得到的?在我看来,这似乎是主要针对 GCC 的特定内容,在任何其他库实现中都不太可能找到。 - AnT stands with Russiaa
标志,我认为根据这个文档,m
标志是它的新版本。 - Keith Millerm
标志现在已经出现在POSIX中,是2008版中新增的。关于标准的好处... - Alan Curryscanf("%ms", &foo);
是正确的。%ms
格式符会分配内存,并“返回”指向该内存的指针。foo
的初始值未使用。 - M.M