gpt4 book ai didi

C - 初始化指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:22 24 4
gpt4 key购买 nike

我试图在 c 中初始化一个指针数组,我成功地初始化了它(它在一个结构中)但是当我尝试在方法中打印它时它确实有效但是如果我尝试在 main 中打印它它不起作用

这就是我所做的:

typedef struct File
{
char fileName[Max_FILE_NAME_LENGTH];
char* listOfFiles[];
} File;

struct File dependencies[MAXIMUM_FILES];

void findListOfFiles(char *line, int i, int currDepend)
{
int idx=0,numOfFiles=0;;
while(line[i]!='\n')
{
char name[Max_FILE_NAME_LENGTH];
while(line[i]!=',' && line[i]!='\n')
{
name[idx]=line[i];
i++;
idx++;
}
name[idx]='\0';
dependencies[currDepend].listOfFiles[numOfFiles]=name;

if(line[i]=='\n')
{
break;
}
numOfFiles++;
i++;
idx=0;
}
}

如果我尝试在 main 中打印它,它不起作用,但如果我尝试在方法中打印它,它就可以工作

最佳答案

您已经为该方法创建了一个本地数组,

char name[Max_FILE_NAME_LENGTH];

在这里,您将数组的地址分配给您的指针。

dependencies[currDepend].listOfFiles[numOfFiles]=name;

但是,当方法结束时,数组也消失了。而你的指针指向垃圾


char name[Max_FILE_NAME_LENGTH];

你现在做的是,

Array:   [abc][def][ghi][jkl][mno]
Address 111 112 113 114 115
name

[] [] [] []
222 223 224 225
listOfFiles

通过做,

dependencies[currDepend].listOfFiles[numOfFiles]=name;

你做

[111]  [111]  [111]  [111]
222 223 224 225
listOfFiles

而不是,

[111]  [112]  [113]  [114]
222 223 224 225
listOfFiles

但是,你不能通过一个字符串一个字符串地复制来做到这一点,

dependencies[currDepend].listOfFiles[numOfFiles]=name[i]; // example

因为,在方法结束后,字符串又不存在了。

你需要分配动态内存比如使用malloc

关于C - 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19837849/

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