我的strcpy出了什么问题?

时间:2013-05-21 18:30:33

标签: c++ strcpy

我自己尝试制作strcpy。它应该可以工作,我甚至复制并粘贴了一些关于strcpy的某人的(几乎是确切的代码)。两者都给我一个“分段错误”。

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

这段代码有什么问题?

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

4 个答案:

答案 0 :(得分:6)

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

char a[] = "hello";

您的strcpy实现也存在错误(假设语法正常)。它应该返回一个指向目标缓冲区的开头的指针,而不是结尾。

答案 1 :(得分:4)

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

因此,当您致电strcpy时,您会收到细分错误。

尝试:

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

代替。

编辑:在strcpy函数内,复制后,destination将指向字符串的结尾,您需要返回字符串的开头。

答案 2 :(得分:3)

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

char* a = "hello";

尝试修改字符串文字是未定义的行为。正如Carl建议的那样,如果使用字符串文字初始化数组,它将起作用:

char a[] = "hello" ;

答案 3 :(得分:3)

除了上面和下面提到的关于字符串文字的所有内容之外,你还会返回一个指向字符串的 END 的指针,所以即使你避免了分段错误,你也会打印“”。