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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Инициализация массива указателей. Непонятно !!!

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

Владимир » 06 ноя 2007, 15:55

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

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

Adamant » 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 спасибо за помощь!

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

Razor » 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 » 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] );  //     содержат строку :  "гггггггггггггггггг"
Собратья ;) кодеры, подскажите в чем дело?
С уважением Вячеслав.

Вернуться к началу