В основном для моего кода у меня есть пары переменных/ключей. Когда в коде встречается переменная, функция (которая содержит часть строк ниже), она заменяется ее ключом. Например, если пользователь ввел строку «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);