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

标签 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/

相关文章:

c - 在 C 项目中导入/包含其他库

c - 在 C 中将数组存储为链表

c - 读取每行 3 个字符的文件时,sizeof(char) 不起作用

vb.net - 对象的类型初始值设定项引发异常

c - 边界图像分割

c - 使用 CMake 测试 GSL 时 CBLAS 中 undefined reference

c++ - Win32 编辑控件为每个新行显示 '|' 类似符号

java - 如何重新排列字符以使单词存在于字典中?

C++:静态初始化一个数组成员,一次成员

initialization - 初始化结构值和字符串键的关联数组