2013-05-31 3 views
1
#include<stdio.h> 

main() 
{ 
    char *str1="beautiful"; 
    char *str2="place"; 
    xstrcat(str1,str2); 
} 

xstrcat(char *s1,char *s2) 
{ 

    char *temp; 
    temp=s1; 

    while(*s1!='\0') 
    { 
     s1++; 
    } 
    while(*s2!='\0') 
    { 
     s1++; 
     *s1=*s2; 
     s2++; 
    } 
    s1++; 
    *s1='\0'; 
    printf("\n%s",temp); 
} 

Выход ошибки: Программный сигнал SIGSEGV, ошибка сегментации. 0x000000000040055d в xstrcat (s1 = 0x400696 «place», s2 = 0x400696 «place») at strcat.c: 23 23 * s1 = * s2;Моделирование strcat в c

Я не могу писать в этой памяти. Может кто-нибудь рассказать, почему я получаю эту ошибку. ?

+2

, потому что у вас нет этой памяти. – user93353

+1

Должно быть много дубликатов для этого ... – hmjd

+0

http://c-faq.com/malloc/malloc2.html – Kevin

ответ

0

str1 - это строковый литерал, который является неопределенным поведением для записи в это место. Было бы целесообразно создать и написать str1, если бы оно было определено следующим образом:

char str1[100] = "beautiful"; 
+0

Почему он хранит его как const без объявления? – user1762571

+0

@ user1762571 Пожалуйста, прочтите следующее: http://stackoverflow.com/a/2589974/1708801 –

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