LINUX.ORG.RU

array (char **array)


0

0

Привет, мужики! Need help, проблема такая:

char **getArray() { char **tmp = new char *[ SIZE ]; char **ret = tmp; //дальше я читаю из файла структуру и по полю присваиваю указателю fseek(fp, 0L, SEEK_SET); while(&structura, sizeof(STRUCT), 1, fp) == 1) { *tmp = structura.name; *tmp++; } return ret; }

Потом читаю:

char **tmp = getArray(); for( int i=0; i < SIZE -1; i++ ) { printf("Item = %s\n", *tmp); *tmp++; }

и получаю список из SIZE ПОСЛЕДНИХ елементов.

Об?ясните, пожалуйста. Спасибо.

anonymous

Попробуй вместо *tmp++ написать просто tmp++.
Кроме того, непонятно почему цикл у тебя до SIZE-1 а не просто SIZE -
ты же на < проверяешь?

Flogger_d
()
Ответ на: комментарий от Flogger_d

Да. ты же присваиваешь просто указатель? А нужно не указательприсваивать, а выделять память и копировать строку туда, иначе
при очередном чтении у тебя все затирается.
И вообще - это пример того, что нужно таки пользовать STL
typedef std::vector< std::string > StrVector;

StrVector getArray(){
StrVector res;
while(fread(&structura...) == 1) res.push_back(structura.name);
return res;
}

Почувствуйте разницу!

Flogger_d
()

char **
getArray() 
{ 
    char **tmp = new char *[ SIZE ];
    memset(tmp, 0, sizeof(char*) * SIZE);
    char **ret = tmp; 
    //дальше я читаю из файла структуру и по полю присваиваю указателю 
    fseek(fp, 0L, SEEK_SET); 
    while(&structura, sizeof(STRUCT), 1, fp) == 1) 
    { 
	*tmp = strndup(structura.name, MAX_STRUCTURA_NAME_LEN); 
	*tmp++; 
    } 
    return ret; 
}

// Потом читаю:

char **tmp = getArray(); 
for( int i=0; i < SIZE && *tmp; i++ ) 
{ 
    printf("Item = %s\n", *tmp); 
    *tmp++; 
}

// и получаю список из SIZE ПОСЛЕДНИХ елементов.

anonymous
()
Ответ на: комментарий от Flogger_d

СПАСИБО, БРАТ, ЗА ИДЕЮ С STL! КРУТИЗНА!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.