我的c ++代码有什么问题?

时间:2013-03-15 18:12:56

标签: c++

在我的书中有一个如何复制字符串(2个指针)的例子。我复制了整个代码,但当我在终端启动程序时,它会显示“Segmentation fault(core dumped)”>。<

这段代码有什么问题? :

#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;
}

2 个答案:

答案 0 :(得分:4)

您的程序有未定义行为,因为您使用的是未初始化变量的值(在这种情况下为hello指针)。

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

char hello[SIZE];

其中SIZE是一个足够大的编译时常量,可以确保数组能够保存要复制到其中的所有字符。如果您的目标只是使用字符串文字来初始化数组,那么您可以这样做:

char hello[] = "Whazzap";

答案 1 :(得分:4)

您的指针hello未初始化。这意味着它指向一些随机存储器位置,您尝试在cpy函数中写入该位置。您基本上是写信给不被允许的地方。

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

由于您正在学习,我会指出这种方法充满了危险:无论您做什么,您都必须确保不会超出您创建的存储空间。请放心,C ++标准库提供了有用的类来安全地处理这类问题,所以这应该只是学习过程的一部分,而不是你在现实生活中编程的事情。