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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Adamant
Сообщения: 17
Зарегистрирован: 08 окт 2007, 21:42

05 ноя 2007, 11:02

Например в файле 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] );  //     содержат строку :  "гггггггггггггггггг"
Собратья ;) кодеры, подскажите в чем дело?
С уважением Вячеслав.
Razor
Сообщения: 1
Зарегистрирован: 05 ноя 2007, 12:18

05 ноя 2007, 12:25

Попробуй каждый элемент массива 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++;
}
}
...
Adamant
Сообщения: 17
Зарегистрирован: 08 окт 2007, 21:42

05 ноя 2007, 15:42

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 спасибо за помощь!
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

06 ноя 2007, 15:55

Посмотри на свой исходный код внимательнее, в цикле ты каждый раз присваиваешь указатель на одну и туже переменную str, содержание которой, меняется от каждого прохода по циклу и после последнего прохода str="гггггггггггггггггг", поэтому при выводе элементов массива s показывается одно и тоже значение
Ответить