Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Строковые  литералы Objective-C

0

Если вам приходится много работать со строками С, выделять память вызовом malloc и последовательно заносить символы было бы крайне неудобно. Вместо этого вы создаете  указатель  на  строку  символов  (завершенную  нуль-символом),  заключая

строку в кавычки. Измените свой код так, чтобы в нем использовался строковый литерал:

int main (int argc, const char * argv[])

{

char x = ‘!'; // The character ‘!’ while (x <= ‘~’) { // The character ‘~’

printf("%x is %c\n", x, x); x++;

}

char *start = "Love";

printf("%s has %zu characters\n", start, strlen(start)); printf("The third letter is %c\n", start[2]);

return 0;

}

Постройте и запустите программу

Для строковых литералов не нужно явно выделять память функцией malloc и освобождать ее. Это константы, которые размещаются в памяти только один раз, и управление памятью обеспечивается компилятором. У «константности» есть побочный эффект: попытка изменения символов строки приведет к неприятностям. Добавление следующей строки вызовет сбой программы:

char *start = "Love";

start[2] = ‘z';

printf("%s has %zu characters\n", start, strlen(start));

При попытке построить и запустить программу выдается сообщение об ошибке EXC_BAD_ACCESS. Вы попытались выполнить запись в память, в которую запись запрещена.

Чтобы компилятор предупреждал о попытках записи в неизменяемые области памяти, воспользуйтесь модификатором const – он означает, что данные, на которые ссылается указатель, не должны изменяться. Попробуйте:

const char *start = "Love"; start[2] = ‘z';

printf("%s has %zu characters\n", start, strlen(start));

Теперь при построении программы компилятор выдает сообщение об ошибке. Удалите проблемную строку (start[2] = ‘z';), прежде чем продолжать. Вы также можете пропустить строки упомянутые выше. Попробуйте:

const char *start = "A backslash after two newlines and a tab:\n\n\t\\"; printf("%s has %zu characters\n", start, strlen(start)); printf("The third letter is \’%c\’\n", start[2]);

return 0; }

Постройте и запустите программу.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии