gpt4 book ai didi

c - 在函数之间传递指向结构数组的指针

转载 作者:行者123 更新时间:2023-12-01 11:54:29 27 4
gpt4 key购买 nike

我有一个程序需要将一些文本逐字加载到一个数组中,所以我为

中定义的每个文本都有一个结构

主要.h

typedef struct wordTag{
char name[MAX_WORD];
char string[1000][MAX_WORD];
int words;
}text;

主.c

void main(){
int fileCount = 0;
text *checkTexts;
fileCount = getCheckFiles(checkTexts);

for(i = 0; i < fileCount; i++){
printf("Tekst navn: %s\n", checkTexts[i].name);
}
}

文件.c

int getCheckFiles(text *checkTexts){

int fileCount, i;

FILE *file;

createFileList(&file);
fileCount = countFiles(file);

createArray(checkTexts, fileCount, file);

return fileCount;



}

void createArray(text *checkTexts, int fileCount, FILE *file){
int i, wordCount;
FILE *textFile;
text localText;
char fileName[MAX_WORD + 30];


checkTexts= (text *)malloc(fileCount * sizeof(text));

readFileNames(file, checkTexts);

for(i = 0; i < fileCount; i++){
localText = checkTexts[i];
strcpy(fileName, "./testFolder/");
strcat(fileName, localText.name);
openFile(&textFile, fileName);

localText.words = countWords(textFile);

readFileContent(textFile, localText);
checkTexts[i] = localText;
}

for(i = 0; i < fileCount; i++){
printf("Tekst navn: %s\n", checkTexts[i].name);

}

}

现在,如果我在 createArray 函数中打印名称,一切正常,但如果我尝试在我的主要函数中打印,我会遇到段错误(核心已转储)。

最佳答案

您还没有初始化您在 main() 中使用的 checkTexts 指针。

在 C(或 C++)中,函数指针通过而不是通过引用传递(除了在 C++ 中,函数被声明为采用引用时类型作为参数)。因此,当您调用 getCheckFiles(checkTexts) 时,getCheckFiles() 对传入的参数做了什么并不重要——它不会更改 main( )checkTexts 变量。

同样的事情随后发生在您对 createArray() 的调用中。因此,尽管您在 createArray() 中创建了数组,指向您 malloc 的缓冲区的指针永远不会传播回调用链。

关于c - 在函数之间传递指向结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com