如何将const char * path传递给fts_open?我想要传递一个文件路径(filePath)。
fts_open
函数需要一个char*
类型的数组,以便与main
函数的argv
数组兼容(由于char**
无法转换为char const**
)。
因此,您需要创建这样的数组。特别是,如果您有一个路径保存在char const*
变量中,您必须复制该字符串;例如:
char path_copy[PATH_MAX];
strcpy(path_copy, path);
char *argv[] = {path_copy, NULL};
FTS *fts = fts_open(argv, FTS_PHYSICAL, nullptr);
... 可能(甚至很可能)fts_open
不会实际修改其参数,因此强制转换掉const
而不是复制字符串应该是可行的。但是,fts_open
的文档没有提供这样的保证,所以我建议不要这样做。
fts_open
的argv
参数(类型为char const **
)。该参数的描述如下:
因此,您需要创建一个长度为2的数组,其元素的类型为argv
是一个以NULL结尾的字符指针数组,命名了构成文件层次结构的一个或多个路径。
char*
。将您的路径放在第一个元素中,并将NULL放在第二个元素中。就像这样:char const *argv[] = { path, NULL };
现在您可以将argv
传递给fts_open
。
char *const *
еҸӮж•°иҖҢдёҚжҳҜconst char *const *
еҸӮж•°гҖӮ :-/ - jørgensenfts_open
不会修改argv
的内容,也不会修改它的元素指向的值。 - tomlogicfts_open
需要一个(常量)指向char *
的指针,而不是指向char const *
的指针。 - Konrad Rudolphfts_open()
的第一个参数是“以空指针结尾的字符指针数组,命名了构成文件层次结构的一个或多个路径。”
因此,您可以像这样传递它:
char *pathlist[2];
pathlist[0] = filePath;
pathlist[1] = NULL;
fts_open( pathlist, ...);
filePath
的类型是 char const*
,那么这个方法就不起作用。 - Konrad Rudolphfts_open()
的函数原型期望第一个参数是char * const *path_argv
。根据cdecl.org,这是一个“指向常量指针的指针”,你不能传递“指向常量指向常量字符”的指针。有没有其他方法可以编写代码,以便将const char *pathlist[]
传递给fts_open()
而不会强制转换掉const
? - tomlogic