2013-11-07 7 views
1

Я пытаюсь инициализировать массив указателей в c, мне удается инициализировать (оно есть в структуре), но когда я пытаюсь напечатать его внутри метода, который он работает, но если i попытайтесь напечатать его в основном это не работает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

Вы создали массив локальной для метода,

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

0

name является локальным для функции, используйте strcpy, чтобы скопировать его в listOfFiles. Обратите внимание, что вы должны выделить память для listOfFiles и для отдельного char *.

Смежные вопросы