1

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

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

4

2 回答 2

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

于 2013-11-07T14:04:30.130 回答
0

name是函数的本地,用于strcpy将其复制到listOfFiles. 请注意,您必须为其拥有listOfFiles的个人char *s 分配内存。

于 2013-11-07T14:04:17.157 回答