Разница в escape-символах C в osx и Windows?

#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 должен работать нормально — этот ответ не имеет никакого сходства с тем, что было, когда я голосовал против.