C - 初始化指针数组

时间:2013-11-07 13:59:13

标签: c arrays pointers

我正在尝试初始化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;
  }
}

如果我尝试在主打印它不起作用,但如果我尝试在方法内打印它确实有效

2 个答案:

答案 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 *分配内存。

相关问题