Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > проблемы с strtok


Автор: admsasha 8.6.2005, 11:03
вот код
Код

int main()
{
    char s[255];
    char param1[1024];
    char param2[5][1024];

    strcpy(s,"5434::4::2::X::1::X::1::");

    strtok(s,"::");
    strcpy(param1,strtok(NULL,"::"));
    printf("param1=[%s]\n",param1);
    strcpy(param2[1],strtok(NULL,"::"));
    strcpy(param2[2],strtok(NULL,"::"));
    strcpy(param2[3],strtok(NULL,"::"));
    strcpy(param2[4],strtok(NULL,"::"));
    strcpy(param2[5],strtok(NULL,"::"));

    printf("param1=[%s]\n",param1);

}


вывод
Код

param1=[4]
param1=[1]


Почему вывод param1 отличается ??, я же нечего с ним не делаю больше ?

Автор: Alastis 8.6.2005, 11:43
у меня выдает:
Код

param1=[4]
param1=[4]

а еще вот здесь ошибка:
Код

strcpy(param2[5],strtok(NULL,"::")); // нумерация в массиве начинается с нуля!

Автор: admsasha 8.6.2005, 11:53
Цитата(Alastis @ 8.6.2005, 18:43)

а еще вот здесь ошибка:
strcpy(param2[5],strtok(NULL,"::")); // нумерация в массиве начинается с нуля!


char s[255];
разве это не от 0 до 255 ???

Автор: chaos 8.6.2005, 12:38
Цитата(admsasha @ 8.6.2005, 11:53)
char s[255];
разве это не от 0 до 255 ???

это от 0 до 254

и вот тебе пример рабочей программы из msdn
Код

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

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

void main( void )
{
   printf( "%s\n\nTokens:\n", string );
   /* Establish string and get the first token: */
   token = strtok( string, seps );
   while( token != NULL )
   {
      /* While there are tokens in "string" */
      printf( " %s\n", token );
      /* Get next token: */
      token = strtok( NULL, seps );
   }
}


Автор: pablo 9.6.2005, 13:53
Цитата
char s[255];
разве это не от 0 до 255 ???


Это то так, но проижодит ссылка на элемент которого нет, это может вызвать непредсказуемый результат.
В данном случае это param2[5]

До исправления вывод такой:
Цитата
param1=[4]
param1=[1]


После вывод такой:
Цитата
param1=[4]
param1=[4]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)