首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指向C中参数中指针的指针

指向C中参数中指针的指针
EN

Stack Overflow用户
提问于 2016-05-14 11:45:56
回答 1查看 134关注 0票数 3

我需要一个字符串数组(动态)。我将指针发送到函数,但函数中出现了错误。

这是一项功能:

代码语言:javascript
运行
复制
void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles);

我呼吁这样做:

代码语言:javascript
运行
复制
char** namesFiles = NULL;
CheckFilesInFolder("Debug", &namesFiles);

在函数中,我做malloc,当i=1时,它的断裂。

代码语言:javascript
运行
复制
*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*) );
int i = 0;
for (i = 0; i < 10; i++)
{
    *(namesFiles[i]) = (char*)malloc(MAX_FILE_NAME);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-14 12:35:11

malloc只使用一个size_t参数。改变这一点:

代码语言:javascript
运行
复制
*namesFiles = (char**)malloc(*namesFiles, 10 * sizeof(char*) );

对此:

代码语言:javascript
运行
复制
*namesFiles = (char**)malloc(10 * sizeof(char*) );

让我知道可能发生的其他错误。

另外,如果需要将指针传递给调用方,为什么不将指针的入口作为参数来返回,而不是将指针的入口传递给调用方呢?

就像这样:char** CheckFilesInFolder(char* pathOfFolder);

在这个函数中做一些类似的事情:

代码语言:javascript
运行
复制
char** namesFiles = (char**)malloc(10 * sizeof(char*) );
//(...)
return namesFiles;

要打电话,只需这样做:char** namesFiles = CheckFilesInFolder("Debug");

我相信这是最好的方法。

编辑1.0以答复"alk“中的注释,下面是通过参数指向char*数组的指针来解决这个问题的方法,而不是我(更简单的)返回char**的建议

按如下方式调用函数:

代码语言:javascript
运行
复制
char** namesFiles;
CheckFilesInFolder("Debug", &namesFiles);

功能内部:

代码语言:javascript
运行
复制
*namesFiles = (char**)malloc(10 * sizeof(char*));
int i;
for (i = 0; i < 10; i++)
    (*namesFiles)[i] = (char*)malloc(MAX_FILE_NAME);

职能声明:

代码语言:javascript
运行
复制
void CheckFilesInFolder(char* pathOfFolder, char*** namesFiles);

使用它,你真的需要使用参数来完成这个任务,例如,如果你想把这个函数作为一个线程的例程来调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37226252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档