Если я начну новый проект командной строки C в Xcode и введите следующий код, я всегда получаю ошибку EXC_BAD_ACCESS при компиляции проекта.
int main(int argc, const char * argv[])
{
char *foo = "Hello";
*foo = 'M'; // get EXC_BAD_ACCESS here when compiling
}
Я просто изучаю C и не могу тренироваться, что не так с этим утверждением? Я просто пытаюсь изменить символ в определенном месте памяти. У кого-нибудь есть идеи?
Ваш код имеет неопределенное поведение. Вы пытаетесь изменить строковый литерал.
BAD_ACCESS - для Mac, какая ошибка сегментации для Linux. Вы развращаете память. Я также предполагаю, что вы получите эту ошибку во время выполнения, а не компиляцию (потому что это было бы странно).
РЕДАКТИРОВАТЬ:
Я также хотел бы отметить, что при распределении статически этого не произойдет.
int main(int argc, const char * argv[])
{
char foo[] = "Hello";
*foo = 'M'; // no more EXC_BAD_ACCESS here
}
foo
указывает на строковый литерал. Вы не можете изменить его (буквальное, неfoo
.)