【发布时间】:2012-08-09 05:51:51
【问题描述】:
无论出于何种原因,都会打印以下代码(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文档中没有看到这一点。 -
我在我的 C11 副本中没有看到任何关于
m标志的信息(诚然,这是一个草稿)。你在哪里得到它?在我看来,它主要是 GCC 特定的东西,你不太可能在任何其他库实现中都找不到。 -
gcc.gnu.org/ml/gcc-patches/2007-09/msg01342.html 也许我的编译器不支持?在 C99 中有
a标志我认为m标志是根据本文档的新版本 -
m标志现在在 POSIX 中,在 2008 版中添加。标准的好处... -
@Palec
scanf("%ms", &foo);是正确的。%ms说明符分配内存并“返回”指向该内存的指针。foo的初始值未使用。