Поскольку i++,strcpy(&str[i],"\0")
оценивает i++
до того, как он оценивает вызов на strcpy()
, который использует теперь увеличенное значение i
в качестве пункта назначения.В сущности, он пропускает первый символ вашей строки.
Обратите внимание, что есть гораздо лучшие способы сделать то, что вы хотите.
KennyTM упомянул только установку первого символа на '\0'
с помощью str[0] = '\0';
, который не очищает каждый байт, но помечает строку как имеющую нулевую длину.
Существует также memset()
, который используется для заполнения блока памяти любым произвольным значением, и 0, безусловно, являетсяпозволено.
Более того, вызов strcpy()
гораздо менее эффективен, чем просто присвоение каждому элементу str[]
в цикле.