我确定这里只是一个愚蠢的错误,然而,我无法弄明白。 这是我的代码的一部分:
char *moving;
scanf("%s", moving);
当我用gcc编译它时,它会说:
newmatrix.c:38:7: warning: ‘moving’ is used uninitialized in this function [-Wuninitialized]
第38行是scanf
我该如何解决这个问题? 感谢
答案 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()
。
moving
是char
类型的指针。在将字符串存储在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);