下面有一个c ++代码。
#include<iostream>
#include <cstring>
using namespace std;
void f(const char* s)
{
char* temp;
strcpy(temp,s);
cout<<temp<<endl;
}
int main()
{
f("HELLO");
return 0;
}
编译时:
g++ -o output main.cpp
它编译没有任何错误。但当我用./output
运行时
它给出错误分段错误(核心转储)
有什么问题?
PS:
操作系统是Ubuntu 14.04 LTS
答案 0 :(得分:3)
您没有为temp
分配任何空间。它被定义为指向char类型的指针,并将初始化为某个随机值。当你将strcpy
字符串放到指针所指向的内存上时,它会尝试复制字符串中的字节&#34; HELLO&#34;在那个几乎肯定无效的记忆中。
要更正此问题,请确保temp
分配了一些实际存储空间。 char temp[buffer_size]
或使用malloc
或new
。或者这是C ++而不仅仅是C,使用C ++标准库中的std::string
类型。
答案 1 :(得分:0)
函数f()中的第一行不为字符串分配存储空间。 所以temp是一个未初始化的指针。结果是未定义的行为。
您将此标记为C ++,因此您可能会考虑:
void f(const char* s)
{
std::string temp(s);
std::cout<<temp<<std::endl;
}
工作正常。