我的筋膜怎么了?

What's wrong with my strcpy?

本文关键字:怎么了 我的      更新时间:2023-10-16

我试着自己制作strcpy。它应该工作,我甚至复制并粘贴了(几乎准确的代码)从有人在这里发布关于strcpy。两者都给我一个"分割错误"。

char* strcpy(char * destination, const char * source)
{
    while( (*destination++ = *source++) != '' ) 
        ;
    return destination;
}

这段代码有什么问题?

char* a = "hello";
cout << strcpy(a, "Haha") << endl;

您正在尝试覆盖字符串文字。这会导致未定义的行为。将a声明为数组:

char a[] = "hello";

您的strcpy实现也有一个错误(假设正常语义)。它应该返回一个指向目标缓冲区起始的指针,而不是指向结束

您正在尝试写入数据段,因为"hello"存储在那里。

因此,当你调用strcpy时,你会得到分段错误。

试题:

char a[] = "hello";
cout << strcpy(a, "Haha") << endl;

编辑:在你的strcpy函数中,在复制之后,destination将指向字符串的结束,你需要返回字符串的开始。

a是一个指向字符串文字的指针:

char* a = "hello";

尝试修改字符串文字是未定义的行为。正如Carl所建议的,如果用字符串字面值初始化一个数组,它将工作:

char a[] = "hello" ;

除了上面和下面提到的关于字符串字面量的所有内容之外,您还返回了指向字符串的END的指针,因此即使您避免了分割错误,您也将打印"。