C &引用;要使用的变量未初始化";警告
我正在测试的代码提供了当前工作目录中的文件列表C &引用;要使用的变量未初始化";警告,c,gcc,initialization,warnings,C,Gcc,Initialization,Warnings,我正在测试的代码提供了当前工作目录中的文件列表 #include <stddef.h> #include <stdio.h> #include <sys/types.h> #include <dirent.h> int main (void) { DIR *dp; struct dirent *ep; dp = opendir ("./"); if (dp != NULL) { while
#include <stddef.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep == readdir (dp))
{
puts (ep->d_name);
(void) closedir (dp);
}
}
else
puts ("Couldn't open the directory.");
return 0;
}
#包括
#包括
#包括
#包括
内部主(空)
{
DIR*dp;
结构方向*ep;
dp=opendir(“./”);
如果(dp!=NULL)
{
while(ep==readdir(dp))
{
放置(ep->d_名称);
(无效)closedir(dp);
}
}
其他的
puts(“无法打开目录”);
返回0;
}
代码可以工作,但是使用GCC编译给了我一个警告,告诉我(我使用西班牙语中的GCC)可能会发生这样的情况:变量ep
可以在函数中不初始化的情况下使用
我试图给变量ep
一个valor来避免这个警告(编程的良好实践),但是这样做会导致程序没有做它应该做的事情
知道发生了什么事,或者我做错了什么吗?你只需要写
while ((ep = readdir(dp)))
因为写入==
不会给ep分配任何内容
while条件的测试将在表达式ep=readdir(dp)的结果上进行,并计算为ep最终值。您只需编写
while ((ep = readdir(dp)))
因为写入==
不会给ep分配任何内容
while条件的测试将在表达式ep=readdir(dp)的结果上进行,计算结果为ep最终值。您将未初始化变量ep等同于此行中函数的返回值
while (ep == readdir(dp))
你想分配任务吗
while ((ep = readdir(dp)))
如果要读取所有条目,可能需要将closedir()
移动到while
循环之外
closedir(dp); //no need to cast
将未初始化变量
ep
与此行中函数的返回值相等
while (ep == readdir(dp))
你想分配任务吗
while ((ep = readdir(dp)))
如果要读取所有条目,可能需要将closedir()
移动到while
循环之外
closedir(dp); //no need to cast
实际上,您需要使用readdir
读取目录,readdir
返回struct dirent*
现在将此返回值存储到ep中,需要检查readdir
是否成功或失败
如果发生错误,则返回NULL并正确设置errno。
您需要检查ep是否为空,但您需要检查ep==readdir(dp)
为了理解清楚,你可以写
while ( (ep == readdir (dp)) !=NULL)
实际上,您需要使用readdir
读取目录,readdir
返回struct dirent*
现在将此返回值存储到ep中,需要检查readdir
是否成功或失败
如果发生错误,则返回NULL并正确设置errno。
您需要检查ep是否为空,但您需要检查ep==readdir(dp)
为了理解清楚,你可以写
while ( (ep == readdir (dp)) !=NULL)
在赋值周围使用一对括号以避免另一个警告。在赋值周围使用一对括号以避免另一个警告。它给我另一个警告,建议我在赋值周围使用括号作为真正的值,就在你建议这项改变的那一行。它给了我另一个警告,建议我在分配周围使用括号,作为真正的勇气,就在你建议这项改变的那一行。