2013-09-07 3 views
0
void cpy(char *s, char *t) {   
while((*s = *t) != '\0') { 
    s++; 
    t++; 
    } 
} 
void main() { 
char *x; 
char *y; 
x="abc"; 
y="zzz"; 
cpy(x,y); 

} 

Что это за неисправность в этой функции? является частью * s = * t неправильной? всегда говорит «Адрес записи о нарушении прав доступа» ...указатель на указатель, Доступ к месту нарушения прав доступа

+1

Вы задали аналогичный вопрос несколько минут назад: - http://stackoverflow.com/questions/18670912/assign-value-to-char-pointer-but-say-access-violation-writing-location –

+0

Речь идет о дон 't изменять строковые литералы, как я ответил в другом вашем вопросе: http://stackoverflow.com/a/18670947/1009479 –

+0

Не изменяйте строковый литерал, поскольку они только для чтения !!! –

ответ

0

Строки, которые вы указываете в квотах, являются постоянными строками и хранятся в памяти только для чтения. Поэтому после

x = "abc" 

x указывает только на область памяти. И когда вы пытаетесь написать там cpy, вы получаете исключение.

+0

означает, что мы подразумеваем, что мы не можем изменить какой-либо один символ строки указателем? – user2756494

+0

Если указатель указывает на данные только для чтения, вы не можете. Вы можете сделать r/w копию с помощью strdup («abc»). И не забывайте о бесплатном после использования. –

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