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

时间:2014-09-11 04:30:15

标签: c char initialization scanf

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

char *moving;
scanf("%s", moving);

当我用gcc编译它时,它会说:

newmatrix.c:38:7: warning: ‘moving’ is used uninitialized in this function [-Wuninitialized]

第38行是scanf

我该如何解决这个问题? 感谢

3 个答案:

答案 0 :(得分:5)

您可以在致电scanf()之前分配内存。例如:

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

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

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

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

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

答案 1 :(得分:3)

在使用前为moving分配内存。使用malloc()

movingchar类型的指针。在将字符串存储在moving之前,需要为其分配内存。

char *moving;
moving = malloc(100); 
scanf("%s", moving);

OR

只需将char *moving更改为char moving[256]

而不是scanf()使用fgets()

答案 2 :(得分:1)

在使用它之前为指针分配内存

char *moving;
moving = malloc(100*sizeof(char));
scanf("%s", moving);