В приведенном ниже коде есть две, может быть, четыре ошибки, я объясняю две ошибки в комментариях к коду:
If we assume that "line", for the purposes of explaining what happens, is "hey\tthere"...
We also assume that "words" is an array of two pointers to char.
// Find the first token, in this case "hey", and return it in "result".
result = strtok(line,TABS); // NOTE: 'line' has been modified by the function!
// Take the last character in the returned statement, which is 'y', and
// copy it to the second cell in the 'words' array, however we are supposed
// to be copying a *pointer* to char there...
words[1]=result[strlen(result)-1];
Кроме того, если «строка» является статической и не может быть изменена, первая строка выше потерпит крах.
Если «words» не выделен или не ссылается на массив из по крайней мере двух указателей на char, то вторая строка завершится сбоем.
Если выполнение кода достигнет этой точки, любой код, использующий массив "words", потерпит крах, потому что код будет ожидать указатели, но получает символы!