我正在尝试初始化c中的指针数组,我成功初始化(它在一个结构中)但是当我尝试在方法内部打印它确实有效但是如果我尝试在主要打印它它不起作用
这就是我的所作所为:
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;
}
}
如果我尝试在主打印它不起作用,但如果我尝试在方法内打印它确实有效
答案 0 :(得分:2)
您已为方法创建了一个本地数组,
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
答案 1 :(得分:0)
name
是函数的本地,使用strcpy
将其复制到listOfFiles
。请注意,您必须为listOfFiles
及其拥有的单个char *
分配内存。