问题是当显示为hi时,没有输出显示。只是想知道为什么会发生此错误。
char * a()
{
char * c;
char b[10];
b[0] = 'h';
b[1] = 'i';
b[2] = '\0';
for (int i = 0; b[i] != '\0'; i++)
c[i] = b[i];
return c;
}
int main()
{
char * d;
d = a();
cout << d;
}
答案 0 :(得分:1)
当您需要数组时,需要为项目分配空间。仅指针是不够的。像
char* c= new char[10]; //room for 10 chars
,请确保不要尝试使用大于10-1 = 9的索引。进入c[10]
是不确定的行为。
您可以返回该指针(return c;
)。但是,别忘了在不再需要分配的内存时将其释放
d = a();
cout << d;
delete [] d; //free memory allocated with new d[...]
答案 1 :(得分:0)
程序中有几个错误。看起来您创建了char类型的指针,然后执行以下操作: c [i] 这将导致错误。这不是您想要的。 也 您不应该将指针/引用返回给局部变量。局部变量在离开作用域时会被破坏(在您的示例中b在“ return c;”处被破坏)。 因此,当您创建指向本地对象的指针时(请注意,变量是在堆栈上创建的,而不是在堆上创建的),并从函数返回时,指针将指向已损坏的内存。它可能会起作用,但可能不会(不确定的行为),但是您永远都不要这样做。