<分区>
我确定这里只是一个愚蠢的错误,但是,我无法弄清楚。 这是我的代码的一部分:
char *moving;
scanf("%s", moving);
当我用 gcc 编译它时,它说如下:
newmatrix.c:38:7: warning: ‘moving’ is used uninitialized in this function [-Wuninitialized]
第38行是scanf
我该如何解决这个问题? 谢谢
标签 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
我该如何解决这个问题? 谢谢
最佳答案
您可以在调用 scanf()
之前分配内存。例如:
char moving[256];
if (scanf("%255s", moving) != 1)
…oops — presumably EOF…
您可以使用 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);
是的,这是 POSIX 标准 scanf()
中鲜为人知的选项之一;它不是标准 C 的一部分。
关于c - scanf 正在使用未初始化的变量; C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779112/