2016-05-03 9 views
-3

Это программа для копирования строки1 в строку2 из книги K & R.Ошибка сегментации в этой программе C

#include <stdio.h> 
void strcpy_m(char *t1, char *t2); 

int main() 
{ 
    char *s1 = "this is 1st"; 
    char *s2 = "this is second"; 
    strcpy_m(s1, s2); 
    printf("%s\t%s\n",s1, s2); 
    return 0; 
} 

void strcpy_m(char *t1, char *t2) 
{ 
while((*t2 = *t1) != '\0'){ 
    t2++; 
    t1++; 
    } 
} 

При выполнении этой программы у меня возникла ошибка сегментации. Какова причина?

+1

Я чувствую, как это было предложено, как 10000000000 раз – Idos

+0

I я на самом деле очень очень слаб, понимая разницу в указателе, массиве и комбинированном использовании в строках. – mrigendra

+0

K & R вам не поможет, это плохо объясняет эти вещи. В частности, часть книги, в которой они разворачиваются по разным версиям 'strcpy', является чистым дерьмом, это очень опасное чтение. Прекратите чтение как можно скорее, получите лучший источник обучения. – Lundin

ответ

2

В вашем коде s1 и s2 являются указателями на string literals. Следовательно, содержимое места памяти, указанное одним из этих указателей, не может быть изменено. Любая попытка изменить содержимое вызывает undefined behavior.

В случае, если вы хотите иметь изменяемую строку, использовать массив, как

#define ARRSIZ 128 //just some arbitary number 

и

char s1[ARRSIZ] = "this is 1st"; 
char s2[ARRSIZ] = "this is second"; 

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

  • Нет связанных вопросов^_^