2013-08-23 2 views
-1
int main() 
{ 
    char s[]="stack"; 
    s="overflow"; 
} 

Это недопустимо. Он дает ошибку. Но ниже код работает нормально.Маска символов Назначение

int main() 
{ 
     char s[]="stack"; 
     strcpy(s,"overflow"); 
} 

Почему это происходит?

+0

может кто-нибудь объяснить, почему это происходит на основе выделения памяти ??? – user2712068

+0

См. Определение 'strcpy' –

+0

Когда вы говорите, что нижний сегмент« работает », вы имеете в виду, что компилятор не выдает ошибку, или s, похоже, содержит« переполнение »? – raser

ответ

-1

Переменная s представляет собой указатель на строку. Более конкретно, это относится к адресу памяти первой буквы в вашей строке "stack". По этой причине операция s="overflow" не имеет смысла. Как вы можете установить значение s (указатель) на строку?

Имейте в виду, что C - язык очень низкого уровня, поэтому вы должны быть осторожны с вещами, которые могут показаться вам интуитивными, которые не ведут себя так, как вы ожидаете от них.

+0

Он не впадает в указатель. Это массив символов, и вы не можете изменить базовый адрес массива после его выделения. –

+0

Вы не можете изменить его, но вы можете рассматривать его как указатель в некоторых случаях (например, для арифметики указателя: 's + 1' относится ко второму символу в массиве). – Lanaru

+0

Да, действительно. Но ваш 'Как вы можете установить значение s (указатель) на строку?' Statement вводит в заблуждение. –

Смежные вопросы