在我的书中有一个如何复制字符串(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;
}
答案 0 :(得分:4)
您的程序有未定义行为,因为您使用的是未初始化变量的值(在这种情况下为hello
指针)。
您可能认为hello
是一个字符数组。如果是这样,请以这种方式声明:
char hello[SIZE];
其中SIZE
是一个足够大的编译时常量,可以确保数组能够保存要复制到其中的所有字符。如果您的目标只是使用字符串文字来初始化数组,那么您可以这样做:
char hello[] = "Whazzap";
答案 1 :(得分:4)
您的指针hello
未初始化。这意味着它指向一些随机存储器位置,您尝试在cpy
函数中写入该位置。您基本上是写信给不被允许的地方。
您需要通过创建char
数组为副本分配空间,但必须确保有足够的空间来复制整个字符串。
由于您正在学习,我会指出这种方法充满了危险:无论您做什么,您都必须确保不会超出您创建的存储空间。请放心,C ++标准库提供了有用的类来安全地处理这类问题,所以这应该只是学习过程的一部分,而不是你在现实生活中编程的事情。