scanf正在使用未初始化的变量; C

Jav*_*lez 1 c initialization scanf char

我确定这里只是一个愚蠢的错误,然而,我无法弄明白.这是我的代码的一部分:

char *moving;
scanf("%s", moving);
Run Code Online (Sandbox Code Playgroud)

当我用gcc编译它时,它说如下:

newmatrix.c:38:7: warning: ‘moving’ is used uninitialized in this function [-Wuninitialized]
Run Code Online (Sandbox Code Playgroud)

第38行是scanf

我该如何解决?谢谢

Jon*_*ler 5

你可以在打电话之前分配内存scanf().例如:

char moving[256];
if (scanf("%255s", moving) != 1)
    …oops — presumably EOF…
Run Code Online (Sandbox Code Playgroud)

您可以使用malloc()而不是简单的数组,但是您必须记住释放分配的内存.OTOH,如果你想从读取它的函数返回数据,它可能更方便使用malloc(),但考虑将指针传递给函数的空间(及其大小?).

或者你可以scanf()为你做内存分配(仔细检查手册页scanf()- 每周阅读一次,直到你记住它(足够)):

char *moving;
if (scanf("%255ms", &moving) != 1)
    …oops — probably EOF, but perhaps OOM (out of memory)…
…use moving…
free(moving);
Run Code Online (Sandbox Code Playgroud)

是的,这是POSIX标准中鲜为人知的选项之一scanf(); 它不是标准C的一部分.