0

在我的书中有一个示例如何复制字符串(2 个指针)。我复制了整个代码,但是当我在终端中启动程序时,它显示“分段错误(核心转储)” >。<

这段代码有什么问题?:

#include <iostream>
#include <string>

using namespace std;


void cpy(char* p,const char* q){

    while(*p++ = *q++) ;
}

int main(){

    char* hello;

    cpy(hello, "Whazzap");

    return 0;
}
4

2 回答 2

4

您的程序具有Undefined Behavior,因为您使用的是未初始化变量的值(hello在本例中为指针)。

您可能打算hello成为一个字符数组。如果是这样,请以这种方式声明:

char hello[SIZE];

哪里SIZE是一个足够大的编译时常量,以确保数组能够保存您想要复制到其中的所有字符。如果您的目标只是使用字符串文字初始化数组,您可以简单地执行以下操作:

char hello[] = "Whazzap";
于 2013-03-15T18:14:01.627 回答
4

您的指针hello未初始化。这意味着它指向某个随机内存位置,您尝试在cpy函数中写入该位置。你基本上是在写你不允许写的地方。

您需要通过创建char数组来为副本分配空间,但您必须确保有足够的空间来复制整个字符串。

既然您似乎正在学习,我将指出这种方法充满危险:无论您做什么,都必须确保不会超出您创建的存储范围进行写入。请放心,C++ 标准库提供了有用的类来安全地处理此类问题,因此这应该只是学习过程的一部分,而不是您在实际编程中所做的事情。

于 2013-03-15T18:15:05.147 回答