возникают проблемы с тем, где strtok отключается

В основном для моего кода у меня есть пары переменных/ключей. Когда в коде встречается переменная, функция (которая содержит часть строк ниже), она заменяется ее ключом. Например, если пользователь ввел строку «Hello ABC World», а переменная была объявлена ​​как ABC = «Great Big», входная строка будет изменена на «Hello Great Big World». Я достигаю этого путем strtok'ирования части строки до переменной и после переменной, а затем конкатенизации newfirst (часть перед переменной) + ключ переменной + newsecond (часть после переменной). По большей части это работает хорошо, ЗА ИСКЛЮЧЕНИЕМ случаев, когда переменная находится в конце строки «Hello World ABC». поэтому я оставляю то, что, как мне кажется, является единственным символом '\n', и выдает ошибку, потому что он не может токенизировать то, что осталось. Есть ли способ, которым я могу ошибиться, чтобы обойти это?

           // Place the part of the string before the variable prescence in newfirst
            strcpy(newfirst, strtok(nonVariable[i], myVariables[a].variable));

            // Place the part of the string after the variable prescence in newsecond
            for(c = 0; c < strlen(newsecond); c++)
            {
                if(newsecond[c] == ' ')
                    hasSpaces = 1;
            }
            if(hasSpaces = 0)
            {
                strcpy(newsecond, strtok(NULL, "\n"));
            }
            else
            {
                strcpy(newsecond, strtok(NULL, " "));
                strcpy(newsecond, strtok(NULL, "\n"));
            }

            // substitute all key values in for their corresponding variables
            strcat(newfirst, " ");
            strcat(newfirst, myVariables[a].key);
            strcat(newfirst, " ");
            strcat(newfirst, newsecond); 
            strcpy(nonVariable[i], newfirst); 

person ellie0414    schedule 14.11.2012    source источник


Ответы (1)


Вы можете указать строку разделителя с несколькими символами для strtok():

ptr = strtok(NULL, " \n\t");

См. man strtok.

person Olaf Dietsche    schedule 14.11.2012