繁体   English   中英

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

[英]Why segmentation fault on implementation of 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;
}

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

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

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

请参阅此C 常见问题解答

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

还有另一种解释 你应该试试

char str1[]="abc";
char str2[]="def";

while( *src;='\0'){ *dst=*src;

您需要在这里取消引用您的指针,使用 &,而不是 *

编辑:

看起来我有自己的颅骨分割错误,在这里 - 早上太早了!

cnicutar 的解释(用char *str2 = "def";分配指向字符串常量的指针,然后尝试写入该位置)更加合理......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM