为什么在strcpy的实现上出现分段错误?

1 c segmentation-fault strcpy

我实现了一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 9

这些是只读的.写入它们会导致未定义的行为.

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

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

见这个C FAQ:

字符串常量实际上是常量.编译器可能将它们放在不可写入的存储器中,因此修改它们是不安全的.

另一种解释.你应该试试

char str1[]="abc";
char str2[]="def";
Run Code Online (Sandbox Code Playgroud)