2016-05-03 8 views
-3

これは、K & Rブックからstring1をstring2にコピーするプログラムです。この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

私のように頼まれました実際にはポインタ、配列の違いを理解することは非常に非常に非常に弱く、文字列に組み合わせて使用​​しています。 – mrigendra

+0

K&Rはそこであなたを助けません。これらのことを説明することは悪いです。とりわけ、さまざまな 'strcpy'バージョンを公開している本の部分は純粋なものですが、それは非常に有害な読み物です。できるだけ早く読んで、より良い学習のソースを取得します。 – Lundin

答えて

2

コードには、s1s2string literalsを指しています。したがって、これらのポインタのいずれかによって指し示されるメモリ位置の内容は変更可能ではない。内容を変更しようとすると、undefined behaviorが呼び出されます。場合

、あなたが修正文字列を持ちたい、アレイの使用を作り、

#define ARRSIZ 128 //just some arbitary number 

char s1[ARRSIZ] = "this is 1st"; 
char s2[ARRSIZ] = "this is second"; 
関連する問題