- Должен ли путь strdup () (который является закомментированной частью в коде) предпочтительнее пути strcpy ()?Насколько я понимаю, strcpy () достаточно и быстрее, но я не уверен.
Ваше решение чисто и работает хорошо, так что не беспокойтесь.Единственное, что вы используете VLA, который теперь является необязательным, тогда использование strdup
будет менее стандартным.Что касается производительности, поскольку не указано, как реализованы VLA, производительность может варьироваться от компилятора / платформы к компилятору / платформе (известно, что gcc использует стек для VLA, но любой другой компилятор может использовать кучу).Мы только знаем, что strdup
выделяет в куче, вот и все.Я сомневаюсь, что проблема с производительностью может возникнуть из-за такого выбора.
Примечание: размер выделенного вами файла неверен и должен быть не менее strlen(str)+1
.
Поскольку для возвращаемого значения size_t не выделено памяти (это локальная переменная), следует ли это сделать для обеспечения устойчивости функции?Или использует size_t nwords = count_nwords (copied_input);полностью безопасен и всегда будет правильно возвращать возвращаемое значение?
Управление возвращаемыми значениями и памятью, подходящей для этого, является задачей компилятора.Обычно эти значения передаются в / из стека (имеют некоторое чтение в «кадре стека»).Как вы можете подозревать, пространство в стеке выделяется для него непосредственно перед вызовом и освобождается после вызова (как только вы отбрасываете или копируете возвращаемое значение).