Это бесконечный цикл:
while (name != "." || name != NULL) {
name++;
}
name
- это char*
. Если встроенный строковый литерал "."
не хранится по адресу NULL
(это не так), то вы говорите, что цикл должен продолжаться вечно, потому что name
всегда будет либо не указывать на хранилище для "."
или не указывает на NULL
. Хотя я считаю, что официально сравнивать несвязанные указатели, такие как "."
и name
, официально не определено, на практике большинство (все модели с плоской памятью?) Просто допускают произвольные сравнения указателей, и, поскольку вы никогда не разыменовываете указатель, вы на самом деле никогда не пытаетесь читать нераспределенные адреса, которые вы пересекаете (вы, в конечном счете, можете сделать ошибку по умолчанию), так что это будет продолжаться вечно.
Мне неясно, какова цель этого цикла (может быть, отстранить ведущие .
s от "скрытых" имен файлов?), Поэтому я не могу действительно предложить исправление, кроме удаления его.