Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> значение strtok в масив, обновление примера  
:(
    Опции темы
Gloft
Дата 27.10.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Собственно нашел пример использования функции strtok.
И решил попробовать немного моджернизировать чтобы результат не выводился, а записывался в двумерный масив.
Но новый пример не работает, проблемма именно в строчках записи результатат функции strtok  в масив (строки arrWords[0] = word).
Читал и про указатели и про масивы, пробовал разные варианты ничего не выходит.
Собственно вопрос не в том где ощибка, а что я делаю не так?
Как правильно делать?
В результате тестов обнаружил, что сам пример работает уже не так как в оригенале, а именно проходит только одну итерацию цикла.
Опытным путем выяснил что это связано со способом получения исходной строки.
В примере ее задают в исходниках, а я ввожу ее с консоли.
Почему так происходит.
Сам оригенал примера лежит тут.
компилирую на freeBSD, компилятор сс, файл как main.c
Код

#include <stdio.h>
#include <string.h>

#define LSTR 128
#define DELMITER " ,.-"

int main (void){
        char inString[LSTR];
        char * word;
        const char arrDelimiters[] = "DELMITER";
        char arrWords[30][20];

        scanf("%s", inString);

        word = strtok (inString, arrDelimiters);
      arrWords[0] = word;
       {
        register int i;
          for (i=1; word != NULL; i++){
                printf ("%s\n",word);
                word = strtok (NULL, arrDelimiters);
              arrWords[i] = word;
          }
        }
        return 0;
}  

PM MAIL   Вверх
IKM2007
Дата 27.10.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Если написал
Код

#define DELMITER " ,.-"

то без кавычек
Код

const char arrDelimiters[] = DELMITER;

Это не string, вместо word= надо писать strcpy(word,...).
Вместо
Код

  word = strtok (inString, arrDelimiters);
      arrWords[0] = word;
       {
        register int i;
          for (i=1; word != NULL; i++){
                printf ("%s\n",word);
                word = strtok (NULL, arrDelimiters);
              arrWords[i] = word;
          }
        }

напиши
  
Код

word = strtok (inString, arrDelimiters);
        register int i;
          for (i=0; word; i++){
              strcpy(arrWords[i],word);
              printf ("%s\n",word);
              word = strtok (NULL, arrDelimiters);
              
          }

а то у тебя там в конце печатает последнее слово, потом word=NULL; и пытаешся скопировать NULL в строку массива.

И еще, я бы на твоем месте не использовал бы #define, лучше const. И еще все равно в современных компьютерах переменные хранятся в регистере, так что слово register ничего не меняет.


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Gloft
Дата 27.10.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Спс за подробный ответ.
Исправил все работает, теперь мне многое стало понятно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0393 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.