Страница 1 из 1

Инициализация массива указателей. Непонятно !!!

Добавлено: 05 ноя 2007, 11:02
Adamant
Например в файле 1.txt записаны 4 строки:

аааааааааааааа
бббббббббббббб
вввввввввввввв
ггггггггггггггггггг

Код: Выделить всё

FILE *fp;
char str[256], *s[1000];
int i = 0;
............
............
while( !feof( fp ) )
   {
      if( fgets( str, 255, fp ) != NULL )
        {
           s[i] = str;
           puts( str );                      // проверка построчного присвоения
           printf("s[%d]:  %s", i, s[i] );  // выводит все правильно
           i++;
        }
   }
// а если здесь вывести :
puts( s[0] );     //  все
puts( s[1] );    //   указатели
puts( s[2] );   //    почему-то 
puts( s[3] );  //     содержат строку :  "гггггггггггггггггг"
Собратья ;) кодеры, подскажите в чем дело?
С уважением Вячеслав.

Re: Инициализация массива указателей. Непонятно !!!

Добавлено: 05 ноя 2007, 12:25
Razor
Попробуй каждый элемент массива s инициализировать отдельно, а затем присваивать значение:

...
while( !feof( fp ) )
{
if( fgets( str, 255, fp ) != NULL )
{
s = new char[256];
strcpt(s, str);
puts( str ); // проверка построчного присвоения
printf("s[%d]: %s", i, s ); // выводит все правильно
i++;
}
}
...

Re: Инициализация массива указателей. Непонятно !!!

Добавлено: 05 ноя 2007, 15:42
Adamant
Razor писал(а):Попробуй каждый элемент массива s инициализировать отдельно, а затем присваивать значение:

...
while( !feof( fp ) )
{
if( fgets( str, 255, fp ) != NULL )
{
s = new char[256];
strcpt(s, str);
puts( str ); // проверка построчного присвоения
printf("s[%d]: %s", i, s ); // выводит все правильно
i++;
}
}
...

Вы видимо сделали опечатку имея в ввиду это: strcpy(s, str);.
Razor спасибо за помощь!

Re: Инициализация массива указателей. Непонятно !!!

Добавлено: 06 ноя 2007, 15:55
Владимир
Посмотри на свой исходный код внимательнее, в цикле ты каждый раз присваиваешь указатель на одну и туже переменную str, содержание которой, меняется от каждого прохода по циклу и после последнего прохода str="гггггггггггггггггг", поэтому при выводе элементов массива s показывается одно и тоже значение