Конечно первый займет больше времени, чем второй. На самом деле они вообще не делают одно и то же - первый вычисляет длину строки каждый раз; второй (эффективно) делает это только один раз.
Первая версия эквивалентна этому:
for (int i=0; x[i] != 0; i++)
for (int j=0; j<i; j++)
;
Может быть, вы хотели сказать "более эффективно вызывать библиотеку strlen (), чем реализовывать мою собственную?" Ответ на это, конечно, «это зависит». Ваш компилятор может иметь встроенные версии strlen (), которые оптимизированы сверх того, что вы ожидаете от исходного кода, вы можете быть на платформе, на которой вызовы функций дороги (в настоящее время редки) и т. Д.
Единственный общий и правильный ответ - «узнай и узнай».