打印当前目录中文件名的C实用程序(Unix)
对C和Unix来说是相当新的 我目前有:打印当前目录中文件名的C实用程序(Unix),c,unix,directory,C,Unix,Directory,对C和Unix来说是相当新的 我目前有: #include "stdio.h" #include <dirent.h> #include <unistd.h> int main(int argc, char ** argv) { char * current = get_current_dir_name(); //where error occurs DIR * directory = NULL; directory = opendir(current)
#include "stdio.h"
#include <dirent.h>
#include <unistd.h>
int main(int argc, char ** argv)
{ char * current = get_current_dir_name(); //where error occurs
DIR * directory = NULL;
directory = opendir(current);
if(directory == NULL)
return -1;
struct dirent * ent;
while((ent = readdir (directory)) != NULL)
printf("%s\n", ent -> d_name);
if(closedir(directory) < 0)
return -1;
}
#包括“stdio.h”
#包括
#包括
int main(int argc,字符**argv)
{char*current=get_current_dir_name();//发生错误的位置
DIR*directory=NULL;
directory=opendir(当前);
if(目录==NULL)
返回-1;
结构导向;
while((ent=readdir(目录))!=NULL)
printf(“%s\n”,ent->d_name);
if(closedir(目录)<0)
返回-1;
}
我被告知:dir.c:15:警告:初始化从整数生成指针而不进行强制转换
显然做了一些非常愚蠢的事情,可能需要一些帮助。获取当前工作目录名称的标准函数是,而不是
get\u current\u dir\u name()
get\u current\u dir\u name()
是GNU扩展,只有在包含
之前定义了宏\u GNU\u SOURCE
时才可用,不建议使用它
在您的情况下,\u GNU\u SOURCE
未定义,因此get\u current\u dir\u name()
不是已声明函数的名称。因此,当C编译器看到您试图调用它时,它会生成一个隐式声明
隐式函数声明在使用点创建一个声明,声明函数接受任意数量和类型的参数,并返回int
。因此,在这种情况下,编译器认为它有一个int
被分配给char*
类型的变量,因此它生成“初始化从整数生成指针,而无强制转换警告”
隐式声明是C语言的一个不推荐的特性,事实上,它已从C99版本中删除,尽管现代编译器即使在C99模式下也经常接受它们(带有警告)。即使在C89模式下,我强烈建议编译时使用尽可能高的警告级别来捕获这样的错误,例如
-Wall-Wextra-Werror-pedantic
,如果您能处理它的话。获取当前工作目录名的标准函数是,而不是获取当前目录名()get\u current\u dir\u name()
是GNU扩展,只有在包含
之前定义了宏\u GNU\u SOURCE
时才可用,不建议使用它
在您的情况下,\u GNU\u SOURCE
未定义,因此get\u current\u dir\u name()
不是已声明函数的名称。因此,当C编译器看到您试图调用它时,它会生成一个隐式声明
隐式函数声明在使用点创建一个声明,声明函数接受任意数量和类型的参数,并返回int
。因此,在这种情况下,编译器认为它有一个int
被分配给char*
类型的变量,因此它生成“初始化从整数生成指针,而无强制转换警告”
隐式声明是C语言的一个不推荐的特性,事实上,它已从C99版本中删除,尽管现代编译器即使在C99模式下也经常接受它们(带有警告)。即使在C89模式下,我强烈建议编译时使用尽可能高的警告级别来捕获这样的错误,例如-Wall-Wextra-Werror-pedantic
,如果您能处理它的话。获取当前工作目录名的标准函数是,而不是获取当前目录名()get\u current\u dir\u name()
是GNU扩展,只有在包含
之前定义了宏\u GNU\u SOURCE
时才可用,不建议使用它
在您的情况下,\u GNU\u SOURCE
未定义,因此get\u current\u dir\u name()
不是已声明函数的名称。因此,当C编译器看到您试图调用它时,它会生成一个隐式声明
隐式函数声明在使用点创建一个声明,声明函数接受任意数量和类型的参数,并返回int
。因此,在这种情况下,编译器认为它有一个int
被分配给char*
类型的变量,因此它生成“初始化从整数生成指针,而无强制转换警告”
隐式声明是C语言的一个不推荐的特性,事实上,它已从C99版本中删除,尽管现代编译器即使在C99模式下也经常接受它们(带有警告)。即使在C89模式下,我强烈建议编译时使用尽可能高的警告级别来捕获这样的错误,例如-Wall-Wextra-Werror-pedantic
,如果您能处理它的话。获取当前工作目录名的标准函数是,而不是获取当前目录名()get\u current\u dir\u name()
是GNU扩展,只有在包含
之前定义了宏\u GNU\u SOURCE
时才可用,不建议使用它
在您的情况下,\u GNU\u SOURCE
未定义,因此get\u current\u dir\u name()
不是已声明函数的名称。因此,当C编译器看到您试图调用它时,它会生成一个隐式声明
隐式函数声明在使用点创建一个声明,声明函数接受任意数量和类型的参数,并返回int
。因此,在这种情况下,编译器认为它有一个int
被分配给char*
类型的变量,因此它生成“初始化从整数生成指针,而无强制转换警告”
隐式声明是C语言的一个不推荐的特性,事实上,它已从C99版本中删除,尽管现代编译器即使在C99模式下也经常接受它们(带有警告)。即使在C89模式下,我也强烈建议编译