#c
#c
Вопрос:
Я играюсь с C в xcode, и у меня возникла проблема с
char array[] = "Apple";
Технически автоматически добавляется нулевой escape ». Я просто пишу базовую функцию для добавления количества букв в c-строке, но я захожу в бесконечный цикл, потому что он не может найти ‘ 0’. Почему это? Я использую g .
int CharLength(char* word)
{
char* temp = word;
int count = 0 ;
while ( temp != '' )
{
temp ;
count ;
}
return count;
}
Комментарии:
1. Вы не разыменовываете свой указатель, чтобы выяснить, на что он указывает. И для этого уже есть отличная функция, которая уже вызывалась
strlen
. И ваш компилятор, как правило, генерирует гораздо более быстрый код для вызоваstrlen
, чем вы когда-либо надеялись бы закодировать самостоятельно.
Ответ №1:
Вы забыли разыменовать.
while ( *temp != '' )
Комментарии:
1. @Omnifarious: Еще раз прочтите два и три слова вопроса.
2. ‘escape-символ’? Да, а как насчет этих двух слов?
3. @Omnifarious: Да ладно, ты собираешься сказать мне, что не можешь отличить заголовок от вопроса? Действительно?
4. @Omni: Из первого предложения, ya goose 🙂 1 ‘ing, поскольку это правильный ответ на вопрос! Вы можете порассуждать о
strlen
илиstd::string
или даже о лучшем языке для обработки строк (Perl, кто-нибудь?) но это не меняет того факта, что этот ответ решает конкретную проблему.
Ответ №2:
« temp
» не будет равно 0, пока вы не просмотрите всю память и не обернете вокруг! С другой стороны, *temp
будет равно нулю, когда вы дойдете до конца строки. Условие цикла должно быть
while ( *temp != '' )
Ответ №3:
Используйте strlen из заголовков <cstring> или <string.h> .
Комментарии:
1. Пропустил тот факт, что он сравнивает указатель, а не символ, на который указывают.
2. @Эрнест Фридман-Хилл: Это все равно лучший ответ, чем ваш. Да, это ошибка, которая была допущена. Но настоящей ошибкой было не использование
strlen
в первую очередь.3. Вы забыли о
std::string
.4. @Omni: ну, поскольку вопрос, похоже, касается того, как
strlen
может быть реализован, я думаю, рекомендовать использованиеstrlen
менее чем полезно. Кроме того, я полагаю, что этот ответ изначально был объяснением того, почему код RoR должен работать нормально — этот ответ не имеет никакого сходства с тем, что было, когда я голосовал против.