Почему ошибка сегментации при реализации strcpy? - PullRequest
1 голос
/ 23 июля 2011

Я реализую простой strcpy, но когда я его запускаю, он всегда выдает ошибку сегментации.Пожалуйста, помогите!

Ниже мой код:

#include <stdio.h>

char* mystrcpy(char *dst, char *src){
    char *ptr = dst;
    while (*src !='\0') {
        *dst = *src;
        dst++;
        src++;
    }
    return ptr;
}

int main (int argc, char **argv) {
    char *str1 = "abc";
    char *str2 = "def";
    char *str3 = NULL;
    str3 = mystrcpy(str2, str1);
    printf("str2 now is %s", str2);
    printf("str3 is %s", str3);
    return 0;
}

Ответы [ 2 ]

9 голосов
/ 23 июля 2011

Это только для чтения. Запись в них приводит к неопределенному поведению .

char *str1="abc"; /* Read-only. */
char *str2="def";

while (*src !='\0') {
    *dst = *src; /* Writes into read-only memory. */

См. C FAQ :

Строковые константы фактически постоянны. Компилятор может поместить их в не записываемое хранилище, поэтому его небезопасно изменять.

И другое объяснение . Вы должны попробовать

char str1[]="abc";
char str2[]="def";
0 голосов
/ 23 июля 2011

while (* src! = '\ 0') { * ДСТ = * ЦСИ;

Вы должны разыменовать ваши указатели здесь, используя &, а не *

EDIT:

Похоже, у меня есть собственная ошибка сегментации черепа, здесь - слишком рано утром!

Объяснение cnicutar (назначение указателя на строковую константу с помощью char *str2 = "def";, а затем попытка записи в это место) гораздо более правдоподобно ...

...